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
ไม่ทำงาน