我正在使用 bash 脚本来遍历配置文件,并在此基础上通过 ssh 调用 python 脚本。不幸的是,一旦 Python 脚本完成它的工作并且我调用 quit,bash 脚本也会关闭,因此调用 bash 脚本的循环会提前终止。
这是我的 Bash 脚本
target | grep 'srv:' | while read l ; do srv $l $SSH ; done
srv () {
SSH=$2
SRV=`echo $1 | awk -F: '{print $2}'`
STATUS=`echo $1 | awk -F: '{print $3}'`
open $SSH "srv" $SRV $STATUS
}
然后在调用python脚本的远程机器上
if __name__== "main":
redirect('./Server.log', 'false')
conn()
if sys.argv[1] == "srv":
ServerState(sys.argv[2], sys.argv[3])
quit()
看起来 quit() 也中断了脚本。
请您参考如下方法:
除非您在本地 bash 中执行了 set -e,否则远程 Python 脚本所做的任何事情都不能终止您的 do 循环> 首先让它对命令失败敏感——在这种情况下,只有当,正如@EOL 所说,你的远程脚本遇到异常并向 SSH 返回一个非零/错误值,然后它会死于一个非零/错误代码本地。
如果将 do srv 替换为 do echo srv 以便您只打印出您认为正在运行的命令,会发生什么情况?您是否看到多个 srv 命令行被打印出来,它们是否具有您期望的参数?
哦:还有,你为什么要使用 open 为命令的每次运行分配一个新的 Linux 虚拟终端?这样你不会用完虚拟终端吗?
