जवाबों:
* निक्स पाइप कैसे काम करते हैं इसकी थोड़ी समझ मदद करेगी।
संक्षेप में >>
पुनर्निर्देशन ऑपरेटर निर्दिष्ट फ़ाइल के अंत में लाइनों को जोड़ देगा, जहां-जैसे एकल से अधिक >
खाली हो जाएगा और फ़ाइल को अधिलेखित कर देगा।
echo "text" > 'Users/Name/Desktop/TheAccount.txt'
-bash: TheAccount.txt: cannot overwrite existing file
।
>
और >>
कर रहे हैं उत्पादन पुनर्निर्देशन ऑपरेटरों। पाइप ऑपरेटर है |
।
>|
मौजूदा अधिलेखित करने के लिए उपयोग करें
बैश में, यदि आपने noclobber a la सेट किया है set -o noclobber
, तो आप सिंटैक्स का उपयोग करते हैं>|
उदाहरण के लिए:
echo "some text" >| existing_file
यदि फ़ाइल अभी तक मौजूद नहीं है तो भी यह काम करता है
जाँच करें कि क्या noclobber के साथ सेट किया गया है: set -o | grep noclobber
इस विशेष प्रकार के ऑपरेटर पर अधिक विस्तृत विवरण के लिए, इस पोस्ट को देखें
पुनर्निर्देशन ऑपरेटरों की अधिक विस्तृत सूची के लिए, इस पोस्ट को देखें
&>| file
काम करता है। आप किस शेल और वर्जन का उपयोग कर रहे हैं? @ जैश के लिए दोनों को काम करना चाहिए , केवल>|
echo "aaa" &>| test.txt
परिणाम में त्रुटि -bash: syntax error near unexpected token |
। मेरा noclobber चालू है।
echo "aaa" >| test.txt 2>&1
किसी अन्य शेल से चिपकना या उपयोग करना होगा।
के NylonSmile
उत्तर के बावजूद , जो "सही" है .. मैं इस तरह से, फ़ाइलों को अधिलेखित करने में असमर्थ था ।
echo "i know about Pipes, girlfriend" > thatAnswer
zsh: file exists: thatAnswer
अपने मुद्दों को हल करने के लिए .. मुझे उपयोग करना था ... >!
, á la ..
[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"
जाहिर है, इससे सावधान ...
NOCLOBBER
सेट है। setopt clobber
डिफ़ॉल्ट व्यवहार को पुनर्स्थापित करने के लिए उपयोग करें ।
यदि आपका वातावरण इसके साथ ओवरराइटिंग की अनुमति नहीं देता है >
, तो पाइप का उपयोग करें |
और tee
इसके बजाय निम्न प्रकार से करें:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'
ध्यान दें कि यह प्रिंटआउट भी प्रिंट करेगा। यदि यह अवांछित है, तो आप आउटपुट को /dev/null
निम्न प्रकार से रीडायरेक्ट कर सकते हैं:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt' > /dev/null
#!/bin/bash
cat <<EOF > SampleFile
Put Some text here
Put some text here
Put some text here
EOF
सिर्फ यह देखते हुए कि यदि आप दोनों std :: cerr और std :: cout को किसी फ़ाइल में पुनर्निर्देशित करना चाहते हैं, जबकि आपके पास noclobber सेट (यानी set -o noclobber
) है, तो आप कोड का उपयोग कर सकते हैं:
cmd >|file.txt 2>&1
इसके बारे में अधिक जानकारी https://stackoverflow.com/a/876242 पर देखी जा सकती है ।
इसके अलावा इस सवाल का जवाब @ प्रदान की जवाब @BrDaHa पर TuBui के सवाल है ऊपर 09:34 पर अगस्त 9 '18 में।
एक फ़ाइल की सामग्री को किसी अन्य फ़ाइल में अधिलेखित करने के लिए। बिल्ली जैसे का उपयोग करें।
echo "this is foo" > foobar.txt
cat foobar.txt
echo "this is bar" > bar.txt
cat bar.txt
अब फोब्बर को अधिलेखित करने के लिए हम नीचे एक बिल्ली कमांड का उपयोग कर सकते हैं
cat bar.txt >> foobar.txt
cat foobar.txt
>>
यदि आपके पास आउटपुट है जिसमें त्रुटियां हो सकती हैं, तो आप निम्नानुसार एक एम्परसेंड और एक से अधिक का उपयोग करना चाह सकते हैं :
my_task &> 'Users/Name/Desktop/task_output.log'
यह stderr और stdout दोनों को लॉग फ़ाइल में रीडायरेक्ट करेगा (केवल stdout के बजाय)।