Ubuntu 16.04
#!/bin/bash
site="hello"
wDir="/home/websites/${site}/httpdocs/"
for file in $(find "${wDir}" -name "*.css")
do
echo "$file";
done
exit 0;
shellcheck me avisa mesmo se eu definir o diretório inicial, mas o script funciona bem.
root@me /scripts/ # shellcheck test.sh
In test.sh line 6:
for file in $(find "${wDir}" -name "*.css")
^-- SC2044: For loops over find output are fragile. Use find -exec or a while read loop.
O problema é exatamente o que o shellcheck está dizendo a você:
for
loops que iteram sobre a saídafind
ou comandos semelhantes são frágeis. Por exemplo:A maneira segura seria usar o
-exec
defind
:Ou para usar um
while
loop:Usar uma saída
for
loop overfind
é, na melhor das hipóteses, um antipadrão. Consulte BashFAQ/001 - Como posso ler um arquivo (fluxo de dados, variável) linha por linha (e/ou campo por campo)? por que razão. Use umwhile
loop como abaixo com umread
comando. O comando abaixo delimita a saídafind
com um byte NULL eread
o comando lê dividindo esse byte, para que todos os arquivos com caracteres especiais em seus nomes sejam tratados com segurança (incluindo novas linhas)Ou evite totalmente o uso de tubulações e faça a substituição do processo
O ShellCheck da web não relata nenhum problema para nenhum dos dois snippets acima.