Bash while 循环 - 中断并退出(DIE 脚本 DIE!!!)

Bash while loop - break and exit (DIE script DIE!!!)

我想从这个脚本中得到的只是通过 ssh 连接到主机,并检查进程是否存活,如果不是,我希望 littel 脚本死掉。 虽然不死。它停止,然后在 ssh 再次成功时再次启动。 虽然我想死。

#!/bin/bash
iterate=0
while [ $iterate -le 20000 ]
do
   rc=$?
   ssh -q -T coolhost "ps -ef | egrep '[i]cool-process' | grep wrapper  "
   if [[  $rc -eq 0 ]] ; then
       sleep 2
       iterate=$((iterate+1 ))
   else
       break
       exit 1
   fi
done

它会迭代到2000,但是如果远程进程中断,它不会死。它不会中断和退出。

这会工作 - 但不会睡觉 - 如果我睡觉,rc 会变为 0 并且永远不会消失。 所以这可行但太基础了。

#!/bin/bash
set -e
while : ; do
   ssh -q -T coolhost "ps -ef | egrep '[i]cool-process' | grep wrapper" > /dev/null 2>&1
done

你在ssh命令之前设置了rc=$?,最后一个命令是test[)命令,刚刚成功,所以当你测试if [[ $rc -eq 0 ]] 答案总是 'yes, it does'.

最好直接测试ssh的状态:

#!/bin/bash
iterate=0
while [ $iterate -le 20000 ]
do
    if ssh -q -T coolhost "ps -ef | egrep '[i]cool-process' | grep wrapper"; then
        sleep 2
        ((iterate++))
    else
        break   # or exit 1
    fi
done