यहाँ समस्या लिनक्स पुनर्निर्देशन के साथ कोई समस्या नहीं है; बल्कि, यह एक बुनियादी गलतफहमी है कि पाइपलाइन कैसे काम करती है। यहां पुनर्निर्देशन काम नहीं कर रहा है क्योंकि केवल कट वास्तव में स्टडआउट के लिए मुद्रण है। इको कमांड के लिए स्टडआउट को स्टड काटने के लिए पाइप किया गया है (जो कि इस मामले में उपयोग नहीं किया जा रहा है क्योंकि फ़ाइल निर्दिष्ट है)।
echo "header line" > output_file && cut -c 1-5 input_file >> output_file
वह है जो आप चाहते हैं, और बिल्कुल भी अयोग्य नहीं है (मैंने आपके ;
साथ इसे बदल दिया है &&
ताकि कट कमांड केवल तभी निष्पादित होगा यदि हेडर सफलतापूर्वक लिखा गया है; इस तरह से यह निष्पादित नहीं होगा यदि आपके पास output_file बनाने या लिखने की अनुमति नहीं है )।
आप यह सब एक उप-प्रकार में भी कर सकते हैं, जैसे।
(echo "header line"; cut -c 1-5 input_file) > output_file
लेकिन ऐसा करने का कोई वास्तविक लाभ नहीं है और अधिक जटिल उदाहरणों के साथ यह समस्या पैदा कर सकता है यदि आप इस बात से परिचित नहीं हैं कि उप-भाग को कैसे बंद किया गया है।
यदि आप स्टडआउट के माध्यम से स्टड पास करने के लिए कट चाहते हैं, तो आप कोशिश कर सकते हैं:
echo "header line" | cut -c 1-5 - input_file
(स्टड के लिए डैश एक सामान्य शॉर्टकट है)
हालांकि, यह स्टड पर कट ऑपरेशन भी करेगा (परिणामस्वरूप "हेडर" की हेडर लाइन)। यह बताना मुश्किल है कि यह वही है जो आप चाहते हैं या नहीं।
{ .... } > some_file 2>&1
( "पीटना" some_file पीटना नहीं है, लेकिन संलग्न यह करने के बजाय, बस बदलने के लिए होगा।>
एक में>>
:{ ... } >> some_file 2>&1
)