Чтение сценария из нового дескриптора в read

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

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 а из другого дескриптора?

1 ответ

Решение

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

for p in $(grep -l regex files); do
    echo -n "Executing $p ... "
    ./$p
    echo "[DONE]"
done
Другие вопросы по тегам