根据
"最初的回答":什么?!
如何运行类似这样的代码并有效地检查其返回状态?上面的测试似乎表明我无法做到这一点。"最初的回答"
man ssh
和之前的回答,ssh应该传播它在远程服务器上运行的任何进程的退出状态。我似乎发现了一个令人困惑的例外!"Original Answer"翻译成"最初的回答"。$ ssh myserver exit 34 ; echo $?
34
Good...
$ ssh myserver 'exit 34' ; echo $?
34
Good...
$ ssh myserver bash -c 'exit 34' ; echo $?
0
"最初的回答":什么?!
$ ssh myserver
ubuntu@myserver $ bash -c 'exit 34' ; echo $?
34
所以问题似乎不是ssh或bash -c
单独存在的问题,而是它们的组合行为与我的预期不符。
我正在设计一个脚本,在远程机器上运行需要使用在客户端计算出的参数列表。为了论证,假设如果任何参数不是远程服务器上的文件,则脚本将失败:
最初的回答:
ssh myserver bash -c '
for arg ; do
if [[ ! -f "$arg" ]] ; then
exit 1
fi
done
' arg1 arg2 ...
如何运行类似这样的代码并有效地检查其返回状态?上面的测试似乎表明我无法做到这一点。"最初的回答"
ssh
将多个参数组合成单个命令。始终传递包含命令的单个参数,例如ssh myserver 'bash -c "exit 34"'
而不是ssh myserver bash -c "exit 34"
。 - chepner