ฉันกำลังมองหาโซลูชันที่จะใช้เป็นคำตอบของ "rm: ลบไฟล์ปกติที่ป้องกันการเขียน [x]?"
ฉันคิดว่าจะออกตัวละครตามด้วยการคืนรถหลาย ๆ ครั้งใน bashrc เราจะทำอย่างนั้นได้อย่างไร?
ฉันกำลังมองหาโซลูชันที่จะใช้เป็นคำตอบของ "rm: ลบไฟล์ปกติที่ป้องกันการเขียน [x]?"
ฉันคิดว่าจะออกตัวละครตามด้วยการคืนรถหลาย ๆ ครั้งใน bashrc เราจะทำอย่างนั้นได้อย่างไร?
คำตอบ:
แก้ไขตามคำถามที่อัปเดต:
เพื่อหลีกเลี่ยงการถูกถามเกี่ยวกับการลบไฟล์ให้เพิ่ม-f
ตัวเลือก ("บังคับ"):
rm -f /path/to/file
สิ่งนี้มีผลข้างเคียงอย่างหนึ่งที่คุณควรระวัง: หากไม่มีเส้นทางใด ๆ ที่ระบุไว้มันจะไม่รายงานสิ่งนี้และมันจะกลับมาสำเร็จ:
$ rm -f /nonexistent/path
$ echo $?
0
คำตอบเดิม:
นี่คือทางออกง่ายๆหนึ่งข้อ:
yes "$string" | head -n $number | tr $'\n' $'\r'
yes
ทำซ้ำสตริงใด ๆ ที่คุณให้เป็นอนันต์คั่นด้วยบรรทัดใหม่ head
หยุดหลังจาก$number
เวลาและtr
แปลบรรทัดใหม่เพื่อส่งคืนค่าขนส่ง คุณอาจไม่เห็นเอาต์พุตใด ๆ เนื่องจากการขึ้นบรรทัดใหม่ แต่การส่งผ่านไปยังคำสั่งนี้ (ในbash
) ควรแสดงให้เห็น:
printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"
ผู้ใช้ที่ไม่มีbash
ท่อกระป๋องผลให้od
, hexdump
หรือxxd
ที่จะเห็นกลับมาของตัวละครที่เกิดขึ้นจริง
ปัญหาอื่น ๆ ที่ฉันพบเป็นครั้งคราวrm
คือ aliased ไปrm -i
บางสิ่งเช่นนี้ใน / etc / bashrc:
alias rm='rm -i'
ในกรณีนั้นคุณสามารถทำได้unalias rm
หรือคุณสามารถใช้เคล็ดลับนี้ที่ฉันค้นพบเมื่อหลายปีก่อนใส่แบ็กสแลชต่อหน้าคำสั่งที่ถูกใช้นามแฝงเพื่อละเว้นนามแฝงเพียงครั้งเดียวเช่น
\rm somefile
คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับนามแฝงผ่านบทความที่Nixcraft
rm
ถูก hardcoded เพื่อถามว่า "แบบโต้ตอบ" (แจ้งให้รอการป้อนข้อมูลของผู้ใช้) บนไฟล์ที่มีการป้องกันการเขียน มีสองวิธีในการป้องกันไม่rm
ให้ถาม:
rm -rf somedir
และ
rm -r --interactive=never somedir
(ทั้งยังทำงานได้โดยไม่ต้อง-r
เมื่อลบไฟล์แทน dirs)
คำอธิบาย:
-f
ทำให้rm
"ไม่สนใจไฟล์และอาร์กิวเมนต์ที่ไม่มีอยู่ไม่มีพร้อมท์"
--interactive=never
ทำในสิ่งที่พูดว่า: ไม่ต้องโต้ตอบ ในคำอื่น ๆ : ไม่เคยแจ้งให้
ความแตกต่างระหว่าง-f
และ--interactive=never
เป็นส่วนนี้: "ละเว้นไฟล์และอาร์กิวเมนต์ที่ไม่มีอยู่"
เปรียบเทียบ:
$ rm -rf nonexistingname
$ echo $?
0
และ
$ rm -r --interactive=never nonexistingname
rm: cannot remove 'nonexistingname': No such file or directory
$ echo $?
1
ความแตกต่างที่น่าสนใจส่วนใหญ่เมื่อเขียนสคริปต์ที่คุณไม่ต้องการrm
โต้ตอบ แต่ก็ยังต้องการจัดการข้อผิดพลาด
สรุป: rm -rf
ในการใช้บรรทัดคำสั่ง rm -r --interactive=never
ในสคริปต์ใช้
สำหรับคำตอบของคำถามที่ระบุไว้ ("วิธีหลีกเลี่ยงความต้องการในการออก" y "หลายครั้งเมื่อลบไฟล์ที่ได้รับการป้องกัน") ดูที่https://askubuntu.com/questions/338857/automatically-enter-input-in-command-line / 338860 # 338860
เพียงแค่ให้ใช่กับคำสั่งทั้งหมดของคุณ!
yes | rm -r /path/
yes | <command>
อย่างไรก็ตามคุณสามารถบังคับใช้-f
:
rm -r -f /path
ฉันก็เจอปัญหาเดียวกัน คำตอบข้างต้นเป็นเพียงไฟล์เดียว แต่ถ้าคุณต้องการเพิกเฉยใช่
คุณสามารถใช้ได้
sudo rm -r /path/to/directory
เพื่อลบไฟล์ปกติที่ป้องกันการเขียนทั้งหมด