O problema
Quando o rm solicitar o uso da entrada, ele não colocará uma nova linha no final do prompt:
$ rm *.uvw *.xyz
rm: remove write-protected regular empty file 'a.xyz'?
grep
é baseado em linha. Só pode processar linhas completas. Não pode dizer se a linha deve ser impressa até que a linha esteja completa. Assim, utilitários padrão para lidar com buffering, como stdbuf
, não podem ajudar.
A solução
Use nullglob e remova as mensagens de arquivos ausentes.
Sem nullglob, as mensagens que você não deseja aparecem:
$ rm *.uvw *.xyz
rm: cannot remove '*.uvw': No such file or directory
rm: remove write-protected regular empty file 'a.xyz'? n
Com isso, a mensagem "Nenhum arquivo ou diretório" é suprimida:
$ shopt -s nullglob
$ rm *.uvw *.xyz
rm: remove write-protected regular empty file 'a.xyz'? n
Refinamento
Se não houver nenhum arquivo que corresponda a glob, uma mensagem de erro diferente será exibida:
$ shopt -s nullglob
$ rm *.uvw *.xyz
rm: missing operand
Try 'rm --help' for more information.
Uma maneira simples de evitar isso é certificar-se de que pelo menos um desses arquivos exista:
shopt -s nullglob
[ -e "deleteme.xyz" ] ||touch deleteme.xyz
rm *.uvw *.xyz
Como deleteme.xyz
será apagado de qualquer forma, não há problema em tocá-lo antes de executarmos rm
.