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.


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

Jawaban:


12

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


10

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

$ rm -- -f
$ rm ./-f

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.