Unix araçları: bir dosya eksi bir şey olarak adlandırılırsa ne olur?


9

Her zaman merak ediyorum: çoğu GNU / Unix aracı "eksi bir şey" biçiminde seçenekler alır, bazen bir argüman izler. Eksi bir şey adlı bir dosyanız varsa ne olur?

$ 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.

veya

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

Bu sadece meraktan çıktı; Bunun için bir kullanım durumum yok.


Kelimenin tam anlamıyla "-f" dizesini sistem çağrısına geçirmenin bir yolunu bulmalısınız. Normalde dikkatli bir şekilde kaçarak.
Flekso

2
'Konu dışı çünkü' seçmenine: Bu, kabuk programlama ve bir sorunun nasıl önleneceği hakkında bir soru. Tamamen SO için konudur. (OTOH, muhtemelen bir kopyadır; sorun ilgili diğer soruyu bulmaktır.)
Jonathan Leffler

Yanıtlar:


12

Adlı bir dosyayı kaldırmak -xiçin rm -- -x( --seçeneklerin sonu anlamına gelir) veya öğesini kullanın rm ./-x.


10

Görüşme ortamlarında bu tür bir soru sormak oldukça yaygındır. Kısa çizgilerle dosyaları işlemenin yaygın bir yolu:

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

6

Unix'te yaygın bir soru. Ana yol, dosyaya tam yol adını vermektir, bu yüzden önünde bir tire yoktur:

$ rm -file.txt
unknown option -l

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

Bazı komutlarda, seçenekleri sonlandırmak için kendi başına bir çizgi (veya çift çizgi) kullanabilirsiniz. Ancak, bu tüm komutlarda, hatta farklı sistemlerde aynı komutta geçerli olmayabilir.

$ rm -- -file.txt   #Works on Linux but not on some Unix systems

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.