Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Tại sao bạn nên gói các đường dẫn tệp trong chuỗi trong tập lệnh Shell của bạn

Tôi tình cờ đọc được một chủ đề về khủng khiếp lập trình sai lầm và tìm thấy điều này:

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

Trong đó có dòng:

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

Lưu ý - Tôi đã thêm foo-bar- vào chuỗi để nếu bạn cố chạy nó, nó sẽ không thực hiện điều mà tôi cảnh báo - ngay cả việc có chuỗi đó trên khay nhớ tạm thời cũng khiến tôi lo lắng! .

Điều gì xảy ra khi nó chạy? Nó xóa sạch toàn bộ / usr / thư mục - về cơ bản là gạch máy tính của bạn! Tất cả chỉ vì một không gian duy nhất .

Do khoảng trống sau / usr , rm lệnh diễn giải nó như là hai thư mục riêng biệt để loại bỏ, không phải một đường dẫn bị gõ nhầm.

Nếu đường dẫn đó được đặt trong dấu ngoặc kép để nó được truyền dưới dạng một tham số duy nhất, thì điều này sẽ không xảy ra.

Hầu hết các ví dụ dòng lệnh sẽ không thực hiện điều này vì nó có thể làm xáo trộn ý nghĩa của một tập lệnh hoặc khiến nó khó đọc hơn - nhưng nếu bạn đang viết tập lệnh thay vì thực hiện các câu lệnh trực tiếp trên dòng lệnh và đặc biệt nếu bạn đang chấp nhận thông tin nhập của người dùng mà họ có thể vô tình chạm vào khoảng trắng ( không bao giờ tin tưởng người dùng) , bạn nên quấn các đường dẫn tệp của mình để phòng ngừa.

Bạn không muốn mất dữ liệu và chắc chắn không muốn mất dữ liệu của người khác.

Và như mọi khi - hãy sao lưu các tệp và hệ thống của bạn thường xuyên! Bạn không bao giờ biết khi nào một sai lầm như thế này có thể vượt qua - đó thậm chí có thể không phải là sai lầm của bạn.