Não é incomum passar pelo problema de tentar apagar um arquivo cujo nome começa com o caracter '-', como no exemplo abaixo:
$ rm -arquivo.txt
rm: invalid option -- a
Não adianta proteger a string pois não é o Shell que atrapalha a ação, e sim o próprio programa que reconhece o símbolo - de uma forma diferente. O programa rm aceita, alem de uma lista de arquivos para apagar, uma série de opções que modificam o seu funcionamento. As mais comuns são:
-f ignore nonexistent files, never prompt
-i prompt before any removal
-r remove the contents of directories recursively
-v explain what is being done
As opções normalmente pode ser colocadas em qualquer lugar da lista de parâmetros.
$ rm -v a.out
removed `a.out'
$ rm a.out -v
removed `a.out'
Quem avalia os parâmetros normalmente é uma função chamada getopt (presente em várias linguagens, inclusive no Bash). Bom, vimos que o - é um caracter especial para o getopt, mas existe alguma forma de burlar isso?
Sim! O proprio getopt prove essa funcionalidade: o uso dos simbolos '--'. Eles interrompem a expansão de parâmetros e tudo o que vier depois desses dois caracteres será interpretado literalmente pelo programa.
Assim sendo:
$ rm -v -- -arquivo.txt
removed `-arquivo.txt'
Esta dica está no help do comando rm e vale para todos os programas que usem getopts.
Um comentário:
É Tiago,
Nunca caí nessa do arquivo começado com sinal de menos, não por ser mais esperto que os outros, mas porque sou uma traça de manual. =)
Basta um man rm para resolver o problema (foi o que fiz na primeira vez em que me deparei com um arquivo desses).
Mas sabia que existe um livro que muitos chamam de «A Bíblia Negra do Hacker» (creio que a alcunha correta seria «o livreto negro de bolso do lammer»)? Esse livro apresenta a questão do «ataque» (ó! pretenção) onde o «atacante» (uf!) usa :> para criar arquivos começando com sinal de menos, cuja única forma de resolver o problema, segundo o livro, é mover todos os demais arquivos para outro diretório e apagar (argh!) o diretório onde estão os arquivos maliciosos.
É de se escangalhar de rir… um verdadeiro livreto de piadas sujas.
[]'s
Cacilhas
Postar um comentário