Alat Unix: bagaimana jika file bernama minus sesuatu?

9

Saya selalu bertanya-tanya: sebagian besar alat GNU / Unix mengambil opsi dalam bentuk "minus something", terkadang diikuti oleh argumen. Bagaimana jika Anda mendapat file bernama minus sesuatu?

$ ls
-f
$ rm -f
$ ls
-f
$ mv -f abc
mv: missing destination file operand after `abc'
Try `mv --help' for more information.
$ cat -f
cat: invalid option -- 'f'
Try `cat --help' for more information.

atau

$ ls
-ohello.c
$ gcc -ohello -ohello.c
gcc: fatal error: no input files
compilation terminated.

Ini hanya karena penasaran; Saya tidak punya kasus penggunaan untuk ini.


sumber
Anda harus menemukan cara untuk melewatkan string "-f" secara harfiah ke panggilan sistem. Biasanya itu dengan melarikan diri dengan hati-hati.
Flexo
2
Untuk pemilih 'tutup karena di luar topik': Ini adalah pertanyaan tentang pemrograman shell dan bagaimana cara menghindari masalah. Ini benar-benar sesuai topik untuk SO. (OTOH, itu mungkin sebuah duplikat; masalahnya adalah menemukan pertanyaan lain yang relevan.)
Jonathan Leffler
kemungkinan duplikat dari Bagaimana cara menghapus file bernama "-p" dari bash?
user1686

Jawaban:

12

Untuk menghapus file yang bernama -x, gunakan rm -- -x( --berarti akhir dari opsi) atau rm ./-x.

Dan D.
sumber
10

Cukup umum untuk menanyakan jenis pertanyaan ini dalam pengaturan wawancara. Cara umum untuk menangani file dengan tanda hubung adalah:

$ rm -- -f
$ rm ./-f
William Pursell
sumber
6

Pertanyaan umum di Unix. Cara utama adalah memberikan nama path lengkap ke file, sehingga tidak memiliki tanda hubung di depannya:

$ rm -file.txt
unknown option -l

$ rm ./-file.txt    #No problem!
$ rm $PWD/-file.txt #Same thing

Beberapa perintah, Anda dapat menggunakan tanda hubung dengan sendirinya (atau tanda hubung ganda) untuk mengakhiri opsi. Namun, ini tidak selalu benar dengan semua perintah, atau bahkan perintah yang sama pada sistem yang berbeda.

$ rm -- -file.txt   #Works on Linux but not on some Unix systems
David W.
sumber
4

kamu harus menggunakan

  rm -- <filename>

Ex:

  rm -- -f
duduk
sumber
Beberapa komentar tidak akan salah.
pengguna tidak diketahui