HERE फ़ाइल और कमांड के आउटपुट को पुनर्निर्देशित करें


11

मेरे पास बैच स्क्रिप्ट में निम्नलिखित कोड है:

mpirun -np 6 ./laplace <<END
100
100
100
0.01
100
3
2
1
END
| tail -n 1 > output

लेकिन यह काम नहीं कर रहा है। क्या मैं यह करना चाहता हूँ कि HIR फाइल को mpirun कमांड के इनपुट के रूप में उपयोग करना है, और फिर आउटपुट को टेल कमांड पर पाइप करना है। हालाँकि, मुझे लगता है कि HERE फ़ाइल और टेल आउटपुट चीजें भ्रमित हो रही हैं।

मुझे यह कैसे लिखना चाहिए ताकि यह वही करे जो मुझे चाहिए?

जवाबों:


12

पहली पंक्ति में आपने जो लिखा है, वह एक पूर्ण कमांड (शेल शब्दावली में "(कंपाउंड) सूची") की तरह दिखता है, इसलिए शेल इसे पूरी कमांड के रूप में मानता है। चूँकि यहाँ एक दस्तावेज़-आरंभ मार्कर है ( <<END), शेल तब यहाँ-दस्तावेज़ सामग्री पढ़ता है, और फिर एक नया कमांड शुरू होता है। यदि आप यहाँ-दस्तावेज़ को एक सूची के बीच में रखना चाहते हैं, तो आपको शेल को इंगित करने की आवश्यकता है कि सूची समाप्त नहीं हुई है। यहाँ कुछ तरीके हैं।

mpirun -np 6 ./laplace <<END |

END
tail -n 1 > output
{ mpirun -np 6 ./laplace <<END

END
} | tail -n 1 > output

या, ज़ाहिर है, आप यह सुनिश्चित कर सकते हैं कि कमांड पूरी तरह से पहली पंक्ति में फिट बैठता है।

mpirun -np 6 ./laplace <<END | tail -n 1 > output

END

यह याद रखने का नियम यह है कि यहां दस्तावेज़ की सामग्री <<ENDसंकेतक के बाद पहली बार रेखांकित की गई नई रेखा के बाद शुरू होती है । उदाहरण के लिए, यहां इस स्क्रिप्ट को लिखने का एक और अस्पष्ट तरीका है:

mpirun -np 6 ./laplace <<END \
| tail -n $(

END
             echo 1) > output

वह पिछले एक! "ओफ़्फ़ुस्ड" .. आप मज़ाक नहीं कर रहे हैं! :) .. मैंने कठिन-नवेली विचार को ठोकर मार दी थी, लेकिन वास्तव में एक ब्रैकेटेड ब्लॉक को bisect करना जैसे कि बिज़ारे पर verging है .. क्या यह डिज़ाइन द्वारा है, या यह एक संयोग है? (उदाहरण। क्या इसके लिए एक वास्तविक उपयोग है? ... और आप वास्तव में उस "पहले" नरम "लाइन में कई अर्ध-
औपनिवेशिक

@fred: बस एक आकस्मिक संयोग। वहाँ कुछ नियम होना चाहिए जहाँ heredoc शुरू होता है और रुक जाता है। यहाँ नियम यह है कि हेरेडोक <<ENDबिट के बाद अगले न्यूलाइन टोकन से जुड़े एकल टोकन की तरह है । एक बैकस्लैश-न्यूलाइन न्यूलाइन को शून्य करता है।
गाइल्स का SO- बुराई पर रोक '26

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.