bash noclobberหนึ่งในตัวเลือกป้องกันจากการเขียนทับไฟล์ที่มีการเปลี่ยนเส้นทาง แต่บางครั้งฉันก็อยากจะ cshมีตัวเลือกที่คล้ายกันและสามารถข้ามไปได้โดยใส่!ชื่อไฟล์ก่อนหน้า มีวิธีใดบ้างในการทำเช่นนี้bash?
bash noclobberหนึ่งในตัวเลือกป้องกันจากการเขียนทับไฟล์ที่มีการเปลี่ยนเส้นทาง แต่บางครั้งฉันก็อยากจะ cshมีตัวเลือกที่คล้ายกันและสามารถข้ามไปได้โดยใส่!ชื่อไฟล์ก่อนหน้า มีวิธีใดบ้างในการทำเช่นนี้bash?
คำตอบ:
ใช่. ผนวกกับผู้ประกอบการเปลี่ยนเส้นทางไปยังรูปแบบ| >|นี่คือ§ 3.6.2 ของคู่มืออ้างอิง Bash , qv
หากโอเปอเรเตอร์การเปลี่ยนเส้นทางคือ '>' และเปิดใช้งานตัวเลือก noclobber ของ set builtin แล้วการเปลี่ยนเส้นทางจะล้มเหลวหากไฟล์ที่มีชื่อเป็นผลมาจากการขยายตัวของคำและเป็นไฟล์ปกติ หากโอเปอเรเตอร์การเปลี่ยนเส้นทางคือ '> |' หรือโอเปอเรเตอร์การเปลี่ยนเส้นทางคือ '>' และไม่ได้เปิดใช้งานตัวเลือก noclobber การเปลี่ยนเส้นทางจะพยายามแม้ว่าจะมีไฟล์ชื่อตามคำอยู่ก็ตาม
เยี่ยมชมการกวดวิชานี้เกี่ยวกับตัวเลือก noclobber อาจช่วยได้
การใช้งาน|( "ท่อ") ในbashแทน!( "ปัง") cshตามที่คุณต้องการใน ตัวอย่างเช่น:
echo done >| out
หมายเหตุว่าถ้าคุณต้องการที่จะเปลี่ยนเส้นทางstderrไปstdout และแทนที่noclobberทั้ง>|&มิได้&>|จะทำงาน; ใช้แบบยาวแทน:
cmd-with-errors done >| out 2>&1
err &>| outไม่ทำงาน