我已经被这个问题困扰了一段时间。
我想要SSH连接到一组机器并检查它们是否可用(接受连接且未被使用)。我编写了一个小脚本“tssh”,可以实现这一点:
#!/bin/bash
host=$1
timeout=${2:-1}
ssh -qo "ConnectTimeout $timeout" $host "[ \`who | cut -f1 | wc -l \` -eq 0 ] && exit 0 || exit 1"
这个脚本正常工作。如果出现连接问题,返回255;如果机器忙碌,则返回1;如果一切正常,则返回0。如果有更好的方法,请告诉我。
接下来,我尝试使用while read循环调用我的一组机器上的tssh,这就是问题所在。只要tssh返回0,循环就会退出,无法完成整个集合。
while read nu ; do tssh "MYBOXES$nu" ; done < <(ruby -e '(0..20).each { |i| puts i }')
一开始我以为这是个子shell的问题,但显然不是。
非常感谢任何帮助和对样式/内容的评论!
我知道当我找到原因时会很后悔...