Ferramentas Unix: e se um arquivo for nomeado menos algo?


9

Estou sempre me perguntando: a maioria das ferramentas GNU / Unix aceita opções no formato "menos algo", às vezes seguido por um argumento. E se você tiver um arquivo chamado menos alguma coisa?

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

ou

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

Isso é apenas por curiosidade; Eu não tenho um caso de uso para isso.


Você precisa encontrar uma maneira de passar literalmente a string "-f" para a chamada do sistema. Normalmente, isso é por uma fuga cuidadosa.
Flexo

2
Para o eleitor de 'fechar porque está fora do tópico': esta é uma pergunta sobre programação de shell e como evitar um problema. É totalmente sobre tópico para SO. (OTOH, é provavelmente uma duplicata; o problema é encontrar a outra questão relevante.)
Jonathan Leffler

Respostas:


12

Para remover um arquivo chamado -x, use rm -- -x( --significa o fim das opções) ou rm ./-x.


10

É bastante comum fazer esse tipo de pergunta nas configurações da entrevista. Uma maneira comum de lidar com arquivos com traços é:

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

6

Uma pergunta comum no Unix. A principal maneira é fornecer o nome completo do caminho para o arquivo, para que ele não tenha um traço na frente:

$ rm -file.txt
unknown option -l

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

Em alguns comandos, você pode usar um traço sozinho (ou um traço duplo) para finalizar as opções. No entanto, isso não é necessariamente verdade com todos os comandos ou mesmo com o mesmo comando em sistemas diferentes.

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.