Você está abordando o problema com a solução errada.
for p in $(grep -l regex files); do
echo -n "Executing $p ... "
./$p
echo "[DONE]"
done
Eu tenho um script que faz algumas perguntas ao usuário e repete a pergunta até que o usuário responda a algo apropriado. Isso é feito com um loop infinito que é break
d quando uma resposta aceitável é lida:
while true
do
read -p "Which helper do you prefer (cache, store)? " HELPER
if [ "$HELPER" = "store" -o "$HELPER" = "cache" ]
then
break
else
error "Invalid option. Choose again"
fi
done
Isso está funcionando bem quando chamado de forma independente. O problema é quando eu executo este script dentro de um | while read ...
loop:
# find scripts that should be run as non-root user, and run them all sequentially
grep -l '^\s*require_non_root' [0-9]* | while read execScript
do
echo "=== EXECUTING $execScript ==="
"./$execScript"
done
A saída do comando grep
é o que deveria estar no meu caso:
15-gitcredentials
20-workspace
40-download_latest_dev_vapp
99-change_username_and_password
O script 15-gitcredentials
(o primeiro recorte que postei faz parte desse script) está lendo o mesmo STDIN
que a parte | while read execScript
espera ler, ou seja, a saída do comando grep. Como eu consegui fazer o script 15-gitcredentials
ler não de STDIN
, mas de outro descritor?