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