Strumenti Unix: cosa succede se un file viene chiamato meno qualcosa?


9

Mi chiedo sempre: la maggior parte degli strumenti GNU / Unix prendono opzioni nella forma "meno qualcosa", a volte seguita da un argomento. E se avessi un file chiamato meno qualcosa?

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

o

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

Questo è solo per curiosità; Non ho un caso d'uso per questo.


Devi trovare un modo per passare letteralmente la stringa "-f" alla chiamata di sistema. Normalmente ciò avviene mediante un'attenta fuga.
Flexo

2
Per l'elettore "vicino perché fuori tema": questa è una domanda sulla programmazione della shell e su come evitare un problema. È totalmente in tema per SO. (OTOH, è probabilmente un duplicato; il problema è trovare l'altra domanda rilevante.)
Jonathan Leffler

Risposte:


12

Per rimuovere un file denominato -x, utilizzare rm -- -x( --indica la fine delle opzioni) o rm ./-x.


10

È abbastanza comune porre questo tipo di domanda nelle impostazioni del colloquio. Un modo comune di gestire i file con trattini è:

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

6

Una domanda comune in Unix. Il modo principale è quello di dare il nome completo del percorso al file, quindi non ha un trattino davanti:

$ rm -file.txt
unknown option -l

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

Alcuni comandi, è possibile utilizzare un trattino da solo (o un trattino doppio) per terminare le opzioni. Tuttavia, ciò non è necessariamente vero con tutti i comandi o anche con lo stesso comando su sistemi diversi.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.