Sử dụng gấp đôi --
để đánh dấu kết thúc các tùy chọn:
cat -- -<FILENAME>
Các chương trình khác như touch
, rm
hoặc git checkout
cũng tuân theo quy ước này:
$ touch -- -file
$ ll
total 0
-rw-r--r-- 1 ja ja 0 Mar 10 13:13 -file
$ echo hi! >> -file
$ cat -- -file
hi!
$ rm -- -file
$ echo $?
0
CẢNH BÁO: Đó là cách thực hành tốt để luôn sử dụng --
sau rm
các tập lệnh. Kẻ tấn công có thể đặt --rf
tệp trong một thư mục và rm *
sẽ lấy nó làm tham số chạy. Xem cái này:
$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch -- -rf
$ rm *
$ ll
total 0
-rw-r--r-- 1 ja ja 0 Mar 10 13:21 -rf
Rất tiếc, điều này không có nghĩa là chúng tôi không muốn xóa các thư mục. Chúng ta nên sử dụng --
:
$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch -- -rf
$ rm -- *
rm: cannot remove `dir': Is a directory
$ ll
total 4.0K
drwxr-xr-x 2 ja ja 4.0K Mar 10 13:22 dir
./
tiền tố. Đây là thiết bị di động nhất (cf Câu hỏi thường gặp về Unix của usenet)