在一个非常简化的情况下该怎么做,我有一个脚本,看起来像这样:击:当标准输出不存在
ssh localhost "test.sh foo"
的:
mv test _test
sleep 10
echo $1
mv _test test
,如果我执行它只要脚本正在运行,测试文件的名称中就会有一个下划线,当脚本完成时,它会发回foo
。即使您通过按ctrl+c
来终止ssh
命令,或者如果您失去了服务器的连接,但它不会(该文件不会重命名回“test”),该脚本仍应继续运行。所以,我试过如下:
nohup ssh localhost "test.sh foo"
,这让SSH免疫ctrl+c
但到服务器断线连接还是引起了麻烦。经过一些调试后,事实证明,如果脚本中没有ECHO,脚本实际上会达到最终结果。当你考虑它的时候,这是有道理的 - 当连接断开时,没有更多stdout
(ssh套接字)可以回显,所以它会自动失败。
我当然可以,呼应一个文件,然后得到的文件,但我宁愿更聪明的东西,沿着test tty && echo $1
(但tty
调用像这样总是返回false
)线。任何建议,非常感谢。
我尝试不同的东西,比如:' ssh -t localhost“测试。我甚至把所有环境变量和'/ dev'目录的内容打印出来,然后把所有的环境变量和/ dev目录的内容打印出来到一个文件,只是为了查看脚本是否能够以某种方式识别连接丢失......我能想到的唯一两个想法是ping回主机或将输出保存到文件中,但我确信有更多微妙的解决方案... – Ulrik 2014-12-03 21:59:07
'>/dev/null 2>&1'是你的朋友 – 2014-12-03 23:46:15
是的,但我需要从脚本接收输出,除非我失去了与服务器的连接 - 在任何一种情况下,脚本都必须结束 – Ulrik 2014-12-04 01:32:02