rm -i
lê sua resposta da entrada padrão, que é herdada do loop while
. Então, uma linha de texto de list.txt
está sendo usada como a resposta para o "remover realmente?" questão. Para corrigir, você precisará separar as duas fontes de entrada. A maneira mais fácil é ter read
recebendo sua entrada de um descritor de arquivo separado:
while IFS= read <&3 -r i; do
rm -i -- "$i" # Quote the file name, not just to be safe,
# but because it's the right syntax.
done 3< list.txt
Você não está mais redirecionando a entrada padrão (fd 0) para o loop while, então rm
lerá do terminal como desejado.
Alternativamente, você poderia ter feito:
IFS=$'\n' # set field separator to newline
set -f # disable globbing upon command substitution
rm -i -- $(cat list.txt)
Ou, com GNU xargs:
xargs -rd '\n' --arg-file=list.txt rm -i --