<分区>
根据 man ssh
和 this previous answer , ssh 应该传播它在远程服务器上运行的任何进程的退出状态。我好像发现了一个莫名其妙的异常!
$ ssh myserver exit 34 ; echo $?
34
好...
$ ssh myserver 'exit 34' ; echo $?
34
好...
$ 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 ...
我怎样才能运行这样的东西并有效地检查它的返回状态?上面的测试似乎表明我不能。