Quero usar o touch
comando no terminal Linux para criar um arquivo com um nome que comece com o símbolo -
, digamos -attempt
.
Como posso superar o fato de -
ser um personagem especial?
Por exemplo, se eu quisesse criar um arquivo com o nome #attempt
, não poderia simplesmente escrevertouch #attempt
Em vez disso eu teria que escrever touch \#attempt
, mas no -
caso mesmo que eu use \
ainda não funciona bem).
Responder1
Dois caminhos:
Afaste- -
se do primeiro caractere
touch ./-foo
Ou use o --
marcador de fim de interruptores
touch -- -foo
Responder2
touch \#attempt
funciona porque o sinal de hash é especial para o shell. Da mesma forma, você precisaria de algo como touch \(foo\)
, ou touch 'this & that'
para nomes de arquivos com parênteses ou e comercial etc.
Mas escapar do traço não ajuda, pois não é especialpara a concha, mas para o utilitário iniciado pelo shell. Executar a linha de comando do shell touch \-foo
é o mesmo que executar touch -foo
, touch
obterá o argumento único -foo
de qualquer maneira.
Então, em vez de escapar, é necessário algo mais.
A maneira padrão de dizer a um programa para parar de interpretar argumentos de comando como opções (possíveis) é inserir o argumento --
após as opções. Por exemplo, isso seria executado rm
com a opção -f
, em um arquivo chamado -r
:
rm -f -- -r
(e rm -- --
removeria um arquivo chamado --
.)
Alternativamente, você pode contornar o problema certificando-se de que o traço não seja o primeiro caractere do nome do arquivo, geralmente acrescentando ./
. Então, novamente, isso removeria um arquivo chamado -rf
:
rm ./-rf