बैश: क्या करता है "> |"


148

मैंने बस यह लिखा हुआ देखा है;

$ some-command >| /tmp/output.txt

ऊर्ध्वाधर पाइप का उपयोग मानक पुनर्निर्देशन "पाइपिंग" में एक कमांड के आउटपुट को दूसरे में किया जाता है >|, वास्तव में पूरी तरह से बेकार है क्योंकि यह >इस परिदृश्य में भी वैसा ही होगा ?



तस्वीर के बाकी हिस्सों के लिए, मैं अत्यधिक अनुशंसा करता हूं कि शेल के नियंत्रण और पुनर्निर्देशन ऑपरेटर क्या हैं?
वाइल्डकार्ड 18

जवाबों:


220

यह बेकार नहीं है - यह सादे >पुनर्निर्देशक ऑपरेटर का एक विशेष रूप है (और, शायद भ्रमित, पाइप के साथ कुछ भी नहीं करना है)। bashऔर अधिकांश अन्य आधुनिक गोले के पास एक विकल्प है noclobber, जो पुनर्निर्देशन को पहले से मौजूद फ़ाइल को ओवरराइट करने या नष्ट करने से रोकता है। उदाहरण के लिए, यदि noclobberयह सत्य है, और फ़ाइल /tmp/output.txtपहले से मौजूद है, तो यह विफल होना चाहिए:

$ some-command > /tmp/output.txt

हालांकि, आप पुनर्निर्देशन ऑपरेटर के noclobberसाथ सेटिंग को स्पष्ट रूप से ओवरराइड कर सकते हैं >|- रीडायरेक्शन काम करेगा, भले ही noclobberवह सेट हो।

आप यह पता कर सकते हैं कि क्या noclobberआपके वर्तमान परिवेश में सेट है set -o

ऐतिहासिक नोट के लिए, "नोकलोबार" विकल्प और इसके बाईपास फीचर्स दोनों csh(70 के दशक के अंत से ) आते हैं। kshइसे (80 के दशक की शुरुआत में) कॉपी किया >|गया, लेकिन इसके बजाय इसका उपयोग किया गया >!। POSIX ने kshसिंटैक्स निर्दिष्ट किया (इसलिए सभी POSIX गोले जिसमें बैश भी शामिल है, कुछ सिस्टम पर sh के रूप में उपयोग किए जाने वाले नए राख डेरिवेटिव)। Zsh दोनों वाक्यविन्यास का समर्थन करता है। मुझे नहीं लगता कि इसे किसी बॉर्न शैल संस्करण में जोड़ा गया था, लेकिन मैं गलत हो सकता हूं।


3
@sch - अपने ऐतिहासिक टिप्पणी फिर से (अतिरिक्त जानकारी के लिए धन्यवाद, Btw) - FreeBSD के shहै noclobber, मई 2002 के बारे में के बाद से
D_Bye
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.