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
我想从这个脚本中得到的只是通过 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