我使用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()也会中断脚本。
答案 0 :(得分:1)
除非您首先在本地do
中完成set -e
以使其对命令失败敏感,否则远程Python脚本所做的任何内容都不应该终止您的bash
循环 - 在在这种情况下,只有当@EOL说,你的远程脚本遇到异常并将非零/错误值返回到SSH时才会死,然后在本地以非零/错误代码消失。
如果将do srv
替换为do echo srv
会发生什么情况,以便您只打印出您认为正在运行的命令?您是否看到打印出几个srv
命令行,并且它们是否具有您期望的参数?
哦:而且,为什么你使用open
为每一次命令运行分配一个新的Linux虚拟终端?你不会用这种方式耗尽虚拟终端吗?
答案 1 :(得分:0)
看起来quit()
是使程序停止的功能。
如果您可以移除对quit()
的呼叫(即,如果它什么都不做),请将其删除。
否则,您可以手动(而不是从shell脚本)运行Python程序,看看会发生什么:您的Python脚本可能会生成异常,这会使shell脚本停止。通过使用真实的参数(在远程计算机上)手动运行Python程序,您应该能够发现问题。
答案 2 :(得分:-1)
你应该可以简单地从主要功能返回。