script lendo do novo descritor em leitura

1

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

Problema:

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?

    
por Carlos Campderrós 27.03.2013 / 18:14

1 resposta

1

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
    
por 28.03.2013 / 09:57