क्या ऐसा पुनर्निर्देशन "|>" सिर्फ एक त्रुटि है या इसका मतलब कुछ है?


9

मैंने इसे गलती से टाइप किया लेकिन बैश ने कोई त्रुटि नहीं छापी (लेकिन एक खाली फ़ाइल बनाई) तो मुझे लगा कि शायद इसका वास्तव में कुछ मतलब है? (उदा। तिथि |> tmp.txt)


1
क्या आप सुनिश्चित हैं कि कमांड फॉर्म का नहीं है date |> tmp.txt cmd2? क्योंकि इससे उत्तर बदल जाता है।
कोनराड रुडोल्फ

जवाबों:


17

ऐसा लगता है कि सिर्फ एक पाइपलाइन है जहां दूसरा भाग एक खाली कमांड है, जिसमें केवल पुनर्निर्देशन है। इसे लिखने date | >fileसे व्याख्या करना आसान हो सकता है। खाली कमांड कुछ भी नहीं करता है, लेकिन पुनर्निर्देशन की प्रक्रिया करता है, फ़ाइल का निर्माण करता है।

date >| fileदूसरी तरफ noclobberशेल विकल्प के लिए एक ओवरराइड के रूप में कार्य करेगा , जो नियमित रूप >से मौजूदा फ़ाइलों को ओवरराइट करने से रोकता है ।

$ touch foo; set -o noclobber
$ date > foo
bash: foo: cannot overwrite existing file
$ date >| foo       # works

1

हां, यह एरर नहीं फेंकेगा क्योंकि बैश का > fileमतलब नाम की फाइल पर रीडायरेक्ट करना है file। जैसा कि आपके मामले में फ़ाइल को रीडायरेक्ट करने के लिए कुछ भी नहीं है, बैश बस एक फ़ाइल नाम बना देगा fileजिसमें कुछ भी नहीं है।

[bd@centos-6.5 my-tests]$ date | > my_file
[bd@centos-6.5 my-tests]$ cat my_file
[bd@centos-6.5 my-tests]$ 

मजेदार। Zsh का एक अलग व्यवहार है: कमांड के बाद, my_fileका आउटपुट होता है date
NI

12
@NajibIdrissi, में zsh, जब केवल पुनर्निर्देशन होते हैं और कोई कमांड नहीं होता है, केवल इनपुट पुनर्निर्देशन होने पर कमांड ( डिफ़ॉल्ट रूप से) या (डिफ़ॉल्ट रूप से पेजर ) zshचलाता है । $NULLCMDcat$READNULLCMD
स्टीफन चेजलस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.