问题:

问题:

我有一个脚本,它会向用户提出一些问题,并重复这些问题,直到用户给出适当的回答。这是通过一个无限循环完成的,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

相关内容