इस आदेश पर विचार करें:
ls /mydir/*.txt | xargs chown root
इरादा सभी पाठ फ़ाइलों के मालिकों mydir
को रूट में बदलने का है
मुद्दा यह है कि अगर कोई .txt
फ़ाइल नहीं है, mydir
तो xargs यह कहते हुए एक त्रुटि करता है कि कोई पथ निर्दिष्ट नहीं है। यह एक हानिरहित उदाहरण है क्योंकि एक त्रुटि डाली जा रही है, लेकिन कुछ मामलों में, जैसे स्क्रिप्ट में जिसे मुझे यहां उपयोग करने की आवश्यकता है, एक खाली पथ को वर्तमान निर्देशिका माना जाता है। इसलिए अगर मैं उस कमांड को चलाता हूं /home/tom/
तो यदि कोई परिणाम नहीं है ls /mydir/*.txt
और सभी फाइलों /home/tom/
को उनके मालिकों ने रूट में बदल दिया है।
तो मैं xargs को खाली परिणाम की अनदेखी कैसे कर सकता हूं?
git branch --merged | grep -v '^* ' | xargs git branch -d
, जो खाली इनपुट पर भी विफल रहता है
ls
प्रोग्रामेटिक उपयोग के लिए कभी भी पाइप आउटपुट नहीं ; देख mywiki.wooledge.org/ParsingLs