No código abaixo,
#!/bin/bash
sDir=/a/b/c
dDir=/d/e/f
rDir="$dDir/recent"
shopt -s nullglob
:
rm $rDir/$deviceName*
:
linha com problema rm $rDir/$deviceName*
mostra operandos ausentes sem comando echo
rm: missing operand
Try 'rm --help' for more information.
Como resolver este erro?
Como você tem
shopt -s nullglob
, o comandorm $rDir/$deviceName*
se expande apenasrm
quando o padrão glob não corresponde a nada.De fato, chamar
rm
sem parâmetros resulta na mensagem que você viu:Compare estes dois:
Uma maneira simples e insegura de silenciar erros de
rm
parâmetros ausentes seria chamá-lo comorm -f
.Note que provavelmente seria muito melhor, em vez disso, evitar terminar em uma situação onde
rm
échamado com um parâmetro feito de variáveis não definidas em primeiro lugar:set -o nounset
irá proibir o uso de variáveis não definidas (mas não fará nada para as variáveis definidas para a string vazia ), por exemplo; se você tivesse que fazerrm $x/$y*
com as duas variáveis não definidas ou vazias, o parâmetro se tornaria/*
, ou seja, todos os arquivos diretamente no diretório raiz.