Unix-Tools: Was passiert, wenn ein Dateiname ohne etwas ist?

Unix-Tools: Was passiert, wenn ein Dateiname ohne etwas ist?

Ich frage mich immer: Die meisten GNU/Unix-Tools akzeptieren Optionen in der Form „minus irgendwas“, manchmal gefolgt von einem Argument. Was wäre, wenn Sie eine Datei mit dem Namen „minus irgendwas“ hätten?

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

oder

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

Dies nur aus Neugier; ich habe keinen Anwendungsfall dafür.

Antwort1

Um eine Datei mit dem Namen zu entfernen -x, verwenden Sie rm -- -x( --bedeutet Ende der Optionen) oder rm ./-x.

Antwort2

Diese Art von Fragen werden in Vorstellungsgesprächen häufig gestellt. Dateien mit Bindestrichen werden häufig folgendermaßen behandelt:

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

Antwort3

Eine häufige Frage unter Unix. Die übliche Methode besteht darin, den vollständigen Pfadnamen der Datei anzugeben, sodass davor kein Bindestrich steht:

$ rm -file.txt
unknown option -l

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

MancheBefehle können Sie einen Bindestrich allein (oder einen doppelten Bindestrich) verwenden, um die Optionen zu beenden. Dies gilt jedoch nicht unbedingt für alle Befehle oder sogar für denselben Befehl auf verschiedenen Systemen.

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

Antwort4

Sie müssen verwenden

  rm -- <filename>

Ex:

  rm -- -f

verwandte Informationen