Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

ปกป้องระบบของคุณ: ความสำคัญของการ Quote File Paths ใน Shell Scripts

ผมพบ thread เกี่ยวกับ disastrous programming mistakes และเจอสิ่งนี้:

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

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

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

หมายเหตุ – ผมเพิ่ม foo-bar- เข้าไปใน string เพื่อถ้าคุณลองรัน มันจะไม่ทำสิ่งที่ผมเตือน – แม้แค่มีมันใน clipboard ทำให้ผมนerves!.

เกิดอะไรขึ้นตอนรัน? มัน wipe out ทั้ง /usr/ directory – ทำให้คอมพิวเตอร์อิฐทุกอย่าง! ทั้งหมดเพราะ single space เดียว

เนื่องจาก space หลัง /usr คำสั่ง rm interpret ว่าเป็นสอง directories แยกกันที่จะลบ ไม่ใช่ path เดียวที่พิมพ์ผิด

หาก path นั้นถูก wrap ใน quotes เพื่อส่งเป็น single parameter สิ่งนี้จะไม่เกิดขึ้น

Command-line examples ส่วนใหญ่ไม่ทำนี้ เพราะอาจ obfuscate ความหมายของ script หรือทำให้อ่านยาก – แต่หากคุณเขียน scripts แทนการ execute statements โดยตรงบน command line และ โดยเฉพาะหากรับ user input ที่พวกเขาอาจกด space ติดมาด้วย (never trust users) ควร wrap file paths ไว้เผื่อไว้

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

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