【发布时间】:2015-09-11 08:31:52
【问题描述】:
我在 bash 中有一个 do-while 循环,它只运行一次主体,但不再运行。
while read id; do
bash ./setup_instance.sh "${id}"
echo "Ran setup_instance"
done < ids.txt
echo "Finished of loop"
文件ids.txt 有两行,每行一个“ID”字符串。我通过用 echo "ID: ${id}" 替换循环内的行来测试这一点,并且循环工作。
另外,请注意,代码确实到达了两个回显行,因此调用脚本不会让我们退出执行。
我做错了什么?
【问题讨论】:
-
setup_instance.sh是否真的完成了,或者它是否一直在无限循环中运行? (显示的代码对我来说看起来不错,如果setup_instance.sh充满了一些虚拟代码,对我来说可以正常工作,这就是为什么我怀疑setup_instance.sh是罪魁祸首。) -
如果你让 echo 工作了两次,那么 body 会运行两次。
setup_instance.sh是做什么的?您期望得到的行为是什么? -
setup_instance是否可能正在消耗所有输入,因此第二次调用read时没有任何内容可供读取? (例如,如果它在没有-n的情况下调用ssh。)尝试从/dev/null重定向其标准输入。 -
@DevSolar 是的,
setup_instance.sh完成,如前所述,echo语句显示发生了什么。 -
@WimLewis,是的,
ssh没有-n。如何从dev/null重定向stdin?像这样:</dev/null?这会破坏脚本中的所有管道操作吗?