ฉันพิมพ์โดยไม่ได้ตั้งใจ แต่ทุบตีไม่ได้พิมพ์ข้อผิดพลาดใด ๆ (แต่สร้างไฟล์เปล่า) ดังนั้นฉันคิดว่าบางทีมันอาจหมายถึงอะไรบางอย่าง? (เช่นวันที่ |> tmp.txt)
ฉันพิมพ์โดยไม่ได้ตั้งใจ แต่ทุบตีไม่ได้พิมพ์ข้อผิดพลาดใด ๆ (แต่สร้างไฟล์เปล่า) ดังนั้นฉันคิดว่าบางทีมันอาจหมายถึงอะไรบางอย่าง? (เช่นวันที่ |> tmp.txt)
คำตอบ:
ดูเหมือนว่าจะเป็นเพียงท่อส่งที่ส่วนที่สองเป็นคำสั่งว่างเปล่ามีเพียงการเปลี่ยนเส้นทาง การเขียนdate | >fileอาจทำให้ตีความได้ง่ายขึ้น คำสั่งที่ว่างเปล่าไม่ได้ทำอะไรนอกจากประมวลผลการเปลี่ยนเส้นทางสร้างไฟล์
date >| fileในทางกลับกันจะทำหน้าที่เป็นตัวแทนที่สำหรับnoclobberตัวเลือกเชลล์ซึ่งจะป้องกันไม่ให้>เขียนทับไฟล์ที่มีอยู่ปกติ
$ touch foo; set -o noclobber
$ date > foo
bash: foo: cannot overwrite existing file
$ date >| foo # works
ใช่มันจะไม่โยนความผิดพลาดเพราะทุบตีวิธีการเปลี่ยนเส้นทางไปยังไฟล์ชื่อ> 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]$
my_file date
zshเมื่อมีการเปลี่ยนเส้นทางเท่านั้นและไม่มีคำสั่งให้zshเรียกใช้$NULLCMDคำสั่ง ( catโดยค่าเริ่มต้น) หรือ$READNULLCMD(เพจเจอร์ตามค่าเริ่มต้น) หากมีการเปลี่ยนเส้นทางอินพุตเท่านั้น
date |> tmp.txt cmd2? เพราะนั่นเปลี่ยนคำตอบ