远程命令的ssh结果

时间:2018-12-19 09:35:21

标签: shell unix ssh

我需要通过远程ssh执行的命令的返回代码。

result=$(ssh $TARGET_USER@$TARGET_SERVER \
'cp /tmp/test1.txt \
/tmp1/test2.txt')

上述命令失败时

我想执行一些警报操作。

但是结果变量的输出似乎始终为空

任何想法,我如何利用结果变量

当我执行上述命令时,我得到了

cp:无法创建常规文件“ /tmp1/test2.txt”:没有此类文件或目录

2 个答案:

答案 0 :(得分:0)

只需检查退出代码

result=$(ssh $TARGET_USER@$TARGET_SERVER 'cp /tmp/test1.txt /tmp1/test2.txt' 2>/dev/null)

[[ $? -ne 0 ]] && your_error_flow

来自 man ssh

 ssh exits with the exit status of the remote command or with 255 if an error
 occurred.

答案 1 :(得分:0)

我还没有测试过,但这值得一试:

result=$(ssh $TARGET_USER@$TARGET_SERVER \
'cp /tmp/test1.txt \
/tmp1/test2.txt 2>&1 > /dev/null')

This answer here说明了如何将stderr捕获到变量中。我只是将它应用于您的命令(我认为stdout不需要这样做)

如果它按预期工作,则您提到的“无此类文件或目录”错误将被捕获到此变量中。因此,您将获得一个可微分的值,该值可能允许您的代码“知道”命令是否成功(理论上,如果命令成功,{stderr将为空)