Tại sao thoát khỏi các nhân vật tầm thường trong kịch bản shell?


23

Tôi vừa mở một tập lệnh shell kế thừa (được viết bằng ksh88 cũ trên Solaris) và thấy các đoạn sau được lặp lại trong suốt mã:

[ -f $myfile ] && \rm -f $myfile

Dấu gạch chéo thoát thoát tấn công tôi như kỳ lạ.

Tôi biết đó là cố ý, vì loại thoát (dường như vô dụng) này được lặp đi lặp lại trong suốt mã. Tác giả ban đầu đã qua lâu, tôi không thể liên lạc với anh ta để hỏi anh ta.

Đây có phải chỉ đơn giản là một sự bình dị hài hước của tác giả hay nó là một loại thực hành tốt bị phản đối có ý nghĩa tại một số thời điểm? Hoặc có thể thực sự là cách làm được đề xuất và tôi đang thiếu một cái gì đó hoàn toàn?


3
Mặc dù có một lý do chính đáng cho nó, việc cung cấp bảo vệ bí danh trong tập lệnh bằng phương thức này không phải là điều tôi gọi là "khuyến nghị". Sẽ là đủ để xóa bí danh ở đầu tập lệnh hoặc gọi rmbằng đường dẫn đầy đủ.
Sorpigal

Câu trả lời:


25

Điều này được sử dụng để bảo vệ bí danh:

$ ls
.bashrc  a  b

$ alias ls
alias ls='ls $LS_OPTIONS'

$ \ls
a   b

5

Nói chung là thực hành tốt để ném một số biện pháp bảo vệ trong rm, thường đạt được bằng cách khử răng cưa. Trong môi trường nhiều người dùng, bạn sẽ thường thấy nhiều sự bảo vệ này.

Đối với một học viên viết kịch bản shell, thường hữu ích cho một người để vô hiệu hóa các biện pháp bảo vệ này vì có lẽ họ biết họ đang làm gì. Điều này, như đã đề cập, được thực hiện bằng cách mở đầu lệnh bằng a \.

Trái với đề xuất của @ Sorpigal, tôi chắc chắn sẽ khuyên bạn không nên đặt bí danh, vì sợ rằng kịch bản không cung cấp cho người dùng các biện pháp bảo vệ an toàn. Hơn nữa, sử dụng một đường dẫn đầy đủ cũng không khôn ngoan vì rm có thể nằm trong một đường dẫn phụ vì một lý do - tức là GNU rm so với BSD rm. Để ghi đè nó bằng một con đường nghiêm ngặt sẽ là đánh bại mục đích có PATH, cụ thể là mở rộng và xử lý nhiều kiến ​​trúc, môi trường và người dùng.


3
Mặc dù là phổ biến, răng cưa rmkhông phải là một thực hành tốt nhưng khá nghèo và đáng tiếc.
jlliagre
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.