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