ฉันจะแทนที่ตัวเลือก bash“ noclobber” ได้อย่างไร?


17

bash noclobberหนึ่งในตัวเลือกป้องกันจากการเขียนทับไฟล์ที่มีการเปลี่ยนเส้นทาง แต่บางครั้งฉันก็อยากจะ cshมีตัวเลือกที่คล้ายกันและสามารถข้ามไปได้โดยใส่!ชื่อไฟล์ก่อนหน้า มีวิธีใดบ้างในการทำเช่นนี้bash?

คำตอบ:


19

ใช่. ผนวกกับผู้ประกอบการเปลี่ยนเส้นทางไปยังรูปแบบ| >|นี่คือ§ 3.6.2 ของคู่มืออ้างอิง Bash , qv

หากโอเปอเรเตอร์การเปลี่ยนเส้นทางคือ '>' และเปิดใช้งานตัวเลือก noclobber ของ set builtin แล้วการเปลี่ยนเส้นทางจะล้มเหลวหากไฟล์ที่มีชื่อเป็นผลมาจากการขยายตัวของคำและเป็นไฟล์ปกติ หากโอเปอเรเตอร์การเปลี่ยนเส้นทางคือ '> |' หรือโอเปอเรเตอร์การเปลี่ยนเส้นทางคือ '>' และไม่ได้เปิดใช้งานตัวเลือก noclobber การเปลี่ยนเส้นทางจะพยายามแม้ว่าจะมีไฟล์ชื่อตามคำอยู่ก็ตาม

เยี่ยมชมการกวดวิชานี้เกี่ยวกับตัวเลือก noclobber อาจช่วยได้


3

การใช้งาน|( "ท่อ") ในbashแทน!( "ปัง") cshตามที่คุณต้องการใน ตัวอย่างเช่น:

echo done >| out

หมายเหตุว่าถ้าคุณต้องการที่จะเปลี่ยนเส้นทางstderrไปstdout และแทนที่noclobberทั้ง>|&มิได้&>|จะทำงาน; ใช้แบบยาวแทน:

cmd-with-errors done >| out 2>&1

คุณรู้ไหมว่าทำไมerr &>| outไม่ทำงาน
Sanghyun Lee
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.