Назад | Перейти на главную страницу

чтение скрипта из нового дескриптора при чтении

У меня есть сценарий, который задает несколько вопросов пользователю и повторяет вопрос, пока пользователь не ответит на что-то подходящее. Это делается с помощью бесконечного цикла, который breakd, когда будет прочитан приемлемый ответ:

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

Это нормально работает при независимом вызове. Проблема в том, что я выполняю этот скрипт внутри | while read ... цикл:

# 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

Результат grep Только команда - это то, что должно быть в моем случае:

15-gitcredentials
20-workspace
40-download_latest_dev_vapp
99-change_username_and_password

Проблема:

в 15-gitcredentials сценарий (первый опубликованный мною фрагмент является частью этого сценария) читает то же самое STDIN что | while read execScript ожидается, что часть будет прочитана, т.е. вывод команды grep. Как я мог сделать 15-gitcredentials сценарий для чтения не из STDIN а от другого дескриптора?

Вы подходите к проблеме с неправильным решением.

for p in $(grep -l regex files); do
    echo -n "Executing $p ... "
    ./$p
    echo "[DONE]"
done