Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

ทำไมคุณควรตัดเส้นทางไฟล์เป็นสตริงในเชลล์สคริปต์ของคุณ

ฉันสะดุดข้ามกระทู้เกี่ยวกับ แย่มาก การเขียนโปรแกรมผิดพลาดและพบสิ่งนี้:

https://github.com/MrMEEE/bumblebee-Old-and-abbandoned/commit/a047be85247755cdbe0acce6f1dafc8beb84f2ac

ซึ่งมีบรรทัด:

rm -rf /foo-bar-usr /lib/nvidia-current/xorg/xorg

หมายเหตุ – ฉันได้เพิ่ม foo-bar- กับเชือกเพื่อที่ว่าถ้าคุณพยายามวิ่ง มันก็ไม่ทำในสิ่งที่ฉันเตือนไว้ –แม้การมีสิ่งนั้นในคลิปบอร์ดของฉันก็ทำให้ฉันประหม่า! .

จะเกิดอะไรขึ้นเมื่อเรียกใช้ มันกวาดล้าง /usr/ . ทั้งหมด ไดเร็กทอรี – สร้างอิฐให้คอมพิวเตอร์ของคุณ! ทั้งหมดเป็นเพราะพื้นที่เดียว .

เนื่องจากช่องว่างหลัง /usrrm คำสั่งตีความว่าเป็นสองไดเร็กทอรีแยกกันที่จะลบ ไม่ใช่หนึ่งพาธที่พิมพ์ผิด

หากเส้นทางนั้นถูกห่อด้วยเครื่องหมายคำพูดเพื่อให้ส่งผ่านเป็นพารามิเตอร์เดียว สิ่งนี้จะไม่เกิดขึ้น

ตัวอย่างบรรทัดคำสั่งส่วนใหญ่จะไม่ทำเช่นนี้เพราะอาจทำให้ความหมายของสคริปต์สับสนหรือทำให้อ่านยากขึ้น แต่ถ้าคุณกำลังเขียนสคริปต์แทนที่จะดำเนินการคำสั่งโดยตรงบนบรรทัดคำสั่งและ โดยเฉพาะอย่างยิ่งถ้าคุณ ยอมรับการป้อนข้อมูลของผู้ใช้ที่อาจแตะพื้นที่โดยไม่ได้ตั้งใจ (ไม่เคย เชื่อถือผู้ใช้) ขอแนะนำให้ห่อเส้นทางไฟล์ของคุณไว้เป็นการป้องกันไว้ก่อน

คุณไม่ต้องการที่จะสูญเสียข้อมูล และคุณไม่ต้องการสูญเสียข้อมูลของคนอื่นอย่างแน่นอน

และเช่นเคย – สำรองไฟล์และระบบของคุณเป็นประจำ! คุณไม่มีทางรู้หรอกว่าความผิดพลาดแบบนี้อาจหลุดมือไปเมื่อไหร่ มันอาจจะไม่ใช่ความผิดพลาดของคุณด้วยซ้ำ