繁体   English   中英

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

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

我要从此脚本执行的所有操作是ssh到主机,并检查该进程是否仍在运行,否则,我希望小脚本消失。 虽然不死。 它停止,然后在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

您设置rc=$? ssh命令之前,最后一个命令是test[ )命令,它刚刚成功执行,因此,当您测试if [[ $rc -eq 0 ]] ,答案始终是“是,确实”。

最好直接测试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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM