我有一个bash脚本,用于获取运行的selenium节点,获取其ID以及SSH以执行配置任务。
#!/bin/bash
# retrieve list of running vagrant machines, filter them to selenium nodes, and
# process provisioning for each
vagrant global-status --prune | grep "selenium_node" | while read -ra line ; do
echo -e "\033[32mBEGININNG ${line[1]} PROVISIONING\033[37m"
# adding this statement causes the loop to exit after 1 iteration
vagrant ssh ${line[0]} -- "
echo 'it runs'
"
echo -e "\033[32mEND ${line[1]} PROVISION\033[37m"
done
我的问题是运行vagrant ssh
会导致循环在第一次迭代后终止。我通过删除流浪汉ssh'来证实这一点。结果是每次迭代都成功运行 BEGINNING 和 END echo命令(在我的情况下 - 两次迭代)。
陌生人的意思是循环完成它的第一次迭代(由 END 回声线完成所证明),它只是不再运行迭代。
此外,我已经确认它不仅仅是忽略了显示其他迭代的输出。它永远不会在其他机器上执行任何操作。
答案 0 :(得分:1)
ssh
- 包括vagrant ssh
- 消耗标准输入,因此如果您在while read
循环内运行它,它将不会为下一个循环迭代留下任何内容。
您可以通过告诉ssh
不要阅读标准输入(ssh -n
)或使用与while read
不同的结构来解决此问题。在这种情况下,由于vagrant ssh
不支持-n
选项,我建议使用从/dev/null
重定向的输入来运行它:
</dev/null vagrant ssh ${line[0]} -- "
echo 'it runs'
"