如何从bash中通过ssh远程运行的函数中检索错误代码?

如何从bash中通过ssh远程运行的函数中检索错误代码?,bash,shell,Bash,Shell,下面是一个简单的脚本,我必须说明我要做的事情: ssh -x user@remote-host " function wtf { rm / }; wtf" wait 然后我在命令行中这样运行它: > if ./wtf.sh; then echo yes; else echo no; fi rm: cannot remove '\': Is a directory yes 显然,rm命令失败,但wtf.sh成功。我想让wtf.sh也返回一个负出口,这样我就可以检测到它。如何执行

下面是一个简单的脚本,我必须说明我要做的事情:

ssh -x user@remote-host "
function wtf
{
    rm /
}; wtf"

wait
然后我在命令行中这样运行它:

> if ./wtf.sh; then echo yes; else echo no; fi
rm: cannot remove '\': Is a directory
yes

显然,
rm
命令失败,但
wtf.sh
成功。我想让
wtf.sh
也返回一个负出口,这样我就可以检测到它。如何执行该操作?

使用
$?
保存最近执行的命令的返回代码。可能您的实际脚本没有示例那么简单(因此
wait
)。变量
retval
存储wtf函数的返回代码,并从脚本返回值

ssh -x user@remote-host "
function wtf
{
    rm /
    return $?
}; wtf; return $?"

wait

这给了我:./wtf.sh:第10行:return:只能从函数或源代码脚本“返回”。如果没有看到脚本,很难说。顺便问一下,您需要在本地定义函数吗?是的,我需要,部分是为了自我包含作业并避免另一个脚本。我将您遇到的retun-retval语句插入到上面的脚本中,而不是真正的脚本中,它给出了一个错误,您需要对命令字符串使用单引号;否则,
$?
将在本地展开,其值将改为发送到远程主机。@chepner但如果我希望在函数命令字符串中在本地展开其他变量,该怎么办?您的函数尝试删除“/”,但错误消息提到“\”。哪个是打字错误?什么是打印“是”?如果
ssh
在实际调用
wait
之前完成,
wait
的退出代码将为0,而不管
ssh
的结果如何。