การเปลี่ยนเส้นทางเช่น“ |>” เป็นเพียงข้อผิดพลาดหรือมีความหมายอะไรไหม


9

ฉันพิมพ์โดยไม่ได้ตั้งใจ แต่ทุบตีไม่ได้พิมพ์ข้อผิดพลาดใด ๆ (แต่สร้างไฟล์เปล่า) ดังนั้นฉันคิดว่าบางทีมันอาจหมายถึงอะไรบางอย่าง? (เช่นวันที่ |> tmp.txt)


1
คุณแน่ใจหรือไม่ว่าคำสั่งไม่ใช่ของฟอร์มdate |> tmp.txt cmd2? เพราะนั่นเปลี่ยนคำตอบ
Konrad Rudolph

คำตอบ:


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เรียกใช้$NULLCMDคำสั่ง ( catโดยค่าเริ่มต้น) หรือ$READNULLCMD(เพจเจอร์ตามค่าเริ่มต้น) หากมีการเปลี่ยนเส้นทางอินพุตเท่านั้น
Stéphane Chazelas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.