
Podemos ver que a sinopse do rm
comando é:
rm [OPTION]... [FILE]...
Isso não significa que podemos usar apenas rm
comandos sem qualquer opção ou argumento?
Quando executo o comando rm
sozinho, o terminal mostra o seguinte erro:
rm: missing operand Try 'rm --help' for more information.
Alguém pode me dizer por que esse é o caso?
Responder1
A sinopse padrão do rm
utilitário é especificadano padrão POSIX1 e 2 como
rm [-iRr] file...
rm -f [-iRr] [file...]
Na sua primeira forma, requer pelo menos um operando de arquivo, mas na segunda forma não.
Ficar rm -f
sem operandos de arquivo não é um erro:
$ rm -f
$ echo "$?"
0
... mas simplesmente não faz muito.
A norma diz que para a -f
opção, a rm
concessionária deve...
Não solicite confirmação. Não grave mensagens de diagnóstico nem modifique o status de saída no caso de operandos sem arquivo ou no caso de operandos inexistentes. Quaisquer ocorrências anteriores da
-i
opção serão ignoradas.
Isso confirma que deve ser possível executar rm -f
sem nenhum operando de nome de caminho e que isso não é algo que faz rm
a saída com uma mensagem de diagnóstico nem um status de saída diferente de zero.
Este fato é muito útil em um script que tenta excluir vários arquivos como
rm -f -- "$@"
onde "$@"
está uma lista de nomes de caminhos que podem ou não estar vazios ou que podem conter nomes de caminhos que não existem.
( rm -f
ainda gerará uma mensagem de diagnóstico e sairá com um status de saída diferente de zero se houverproblemas de permissãoimpedindo que um arquivo nomeado seja removido.)
Executar o utilitário sem opção nem operandos de nome de caminho é um erro:
$ rm
usage: rm [-dfiPRrv] file ...
$ echo "$?"
1
O mesmo vale para GNU rm
(o acima mostra OpenBSD rm
) e outras implementações do mesmo utilitário, mas a mensagem de diagnóstico exata e o status de saída diferente de zero podem ser diferentes (no Solaris o valor é 2 e no macOS é 64, por exemplo).
Concluindo, o rm
manual do GNU pode ser um pouco impreciso, pois é verdade que com alguma opção ( -f
, que é uma opção opcional), o operando do nome do caminho é opcional.
1 desde a edição de 2016, após resolução deesse bug, vera edição anteriorpara referência.
2 POSIX é o padrão que define o que é um sistema Unix e como ele se comporta. Esta norma é publicada pelaO Grupo Aberto. Veja também a pergunta "O que exatamente é POSIX?".
Responder2
Tecnicamente, a sinopse está correta, mas é confusa. Há casos em que nenhum nome de arquivo é necessário:
rm --help
rm --version
(ao usar GNU rm
). Todos os outros casos requerem um nome de arquivo.
Outras versões rm
mostram o arquivo como não opcional,por exemploema página de manual do OpenBSD.
Uma sinopse mais precisa do GNU rm
mostraria as três variantes:
rm
[opções...]arquivo...
rm --help
rm --version