我正在尝试编写一个脚本,它将等待服务器启动并检查ssh是否正在运行。
#!/bin/bash
until [ $(ssh -o BatchMode=yes -o ConnectTimeout=5 root@HOST echo ok 2>&1) = "ok" ]; do
echo "Trying again..."
done
echo "SSH is running"
如果服务器关闭电源,则会出现此错误:
test3: ligne 3 : [: Too many arguments
Trying again...
^C
如果服务器正在运行,则输出:
ok
答案 0 :(得分:1)
一个简单的解决方法是在字符串周围加上双引号,这可能会变成空。
until [ "$(ssh ...)" = "ok" ]; do ...
仅Bash的测试[[
更具容错性,因此您可以使用[[
... ]]
代替[
... ]
,然后不必添加引号。
...但是更好的解决方案是从ssh
查找退出状态:
until ssh ...; do ...
如果您希望操作静音,请添加重定向。
until ssh user@hostname true >/dev/null 2>&1; do ...
当然还有您想要的任何其他选项。例如,如果它抱怨没有连接到TTY,则可能需要添加一个或多个ssh -t
选项。
答案 1 :(得分:0)
您的ssh
命令扩展为空,或扩展为多个单词;您应该引用它(并在脚本上运行Shellcheck):
until [ "$(ssh ... )" = ok ]; do