Bash:“> |” ทำอะไร


148

ฉันเพิ่งเห็นสิ่งนี้ถูกเขียนลงไป;

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

ไปป์แนวตั้งถูกใช้ในการเปลี่ยนเส้นทางมาตรฐาน "piping" เอาต์พุตของคำสั่งหนึ่งไปยังอีกคำสั่ง>|ในความเป็นจริงแล้วมันไร้ประโยชน์อย่างสมบูรณ์เพราะมันจะเหมือนกับ>ในสถานการณ์นี้ใช่ไหม?



คำตอบ:


220

มันไม่มีประโยชน์อะไร - เป็นรูปแบบเฉพาะของ>โอเปอเรเตอร์การเปลี่ยนเส้นทางแบบธรรมดา(และอาจสับสนได้ไม่มีส่วนเกี่ยวข้องกับไพพ์) bashและเชลล์สมัยใหม่ส่วนใหญ่มีตัวเลือกnoclobberซึ่งป้องกันการเปลี่ยนเส้นทางจากการเขียนทับหรือทำลายไฟล์ที่มีอยู่แล้ว ตัวอย่างเช่นถ้าnoclobberเป็นจริงและไฟล์/tmp/output.txtมีอยู่แล้วสิ่งนี้ควรล้มเหลว:

$ some-command > /tmp/output.txt

อย่างไรก็ตามคุณสามารถแทนที่การตั้งค่าอย่างชัดเจนnoclobberด้วย>|โอเปอเรเตอร์การเปลี่ยนเส้นทาง - การเปลี่ยนเส้นทางจะใช้งานได้แม้ว่าnoclobberจะตั้งค่าไว้ก็ตาม

คุณสามารถดูว่าnoclobberมีการตั้งค่าในสภาพแวดล้อมปัจจุบันของคุณด้วยset -oหรือไม่

สำหรับบันทึกในอดีตตัวเลือก "noclobber" และคุณลักษณะบายพาสมาจากcsh(ช่วงปลายยุค 70) kshคัดลอก (80 ต้น) แต่นำมาใช้แทน>| >!POSIX ระบุkshไวยากรณ์ (ดังนั้น POSIX เชลล์ทั้งหมดรวมถึง bash, อนุพันธ์ Ash ที่ใหม่กว่าที่ใช้เป็น sh ในบางระบบสนับสนุน) Zsh รองรับทั้งไวยากรณ์ ฉันไม่คิดว่ามันจะถูกเพิ่มเข้าไปในตัวแปรเชลล์ Bourne ใด ๆ แต่ฉันอาจผิด


3
@sch - บันทึกประวัติศาสตร์ของคุณอีกครั้ง (ขอบคุณสำหรับข้อมูลเพิ่มเติม btw) - FreeBSD shมีnoclobberตั้งแต่ประมาณพฤษภาคม 2002
D_Bye
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.