Чтение сценария из нового дескриптора в 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