Cite suas variáveis!
while read line
e, em seguida, ls $line
não funcionarão; você tem que usar ls "$line"
para manipular espaços em branco nas variáveis. Geralmente, cite suas variáveis quando você as usa!
Se você não fizer isso, estará fazendo um grande problema ao tentar rm $line
, se essa linha for
~/mail/. Trash/new
Então, se você fez ls $line
, tentaria listar duas pastas:
-
~/mail
-
Trash/new
No pior caso, se você fizesse um rm -rf $line
, você removeria ~/mail
completamente ! Então, use ls "$line"
dentro do seu loop. E o mesmo para rm
.
Na verdade, a maneira mais robusta de ler um arquivo linha por linha e tratar adequadamente os espaços em branco é explicada aqui :
while IFS= read -r line; do
ls "$line"
done < "$file"
O -r
impede que as barras invertidas sejam expandidas, e IFS=
ajuda no caso de uma linha começar ou terminar com um espaço em branco, que o shell cortaria de outra forma.
Não use caminhos que precisam ser expandidos!
Se o seu arquivo de texto contiver caminhos que serão posteriormente expandidos, o caminho será alterado dependendo de quem executa o script. Aqui, ~
será expandido para o caminho inicial do usuário no momento da execução, portanto, se você estiver executando o script como root
, ele será iniciado a partir de /root
e não a partir da origem do usuário no ponto de criação o arquivo de texto.
Portanto, armazene os caminhos completos em seu arquivo.