我正在编写一个脚本,尝试在服务器上运行一些命令(通过SSH),并在屏幕上显示它们是否成功。
我注意到$?
的奇怪行为,即当前一个命令失败时它不是0
。
最初,我的代码如下:
ssh <user>@<server> <<EOF
false
if [ $? -ne 0 ]; then
echo "It failed"
else
echo "It worked"
fi
EOF
我将脚本复制并粘贴到<<EOF
和EOF
标签之间,会打印It failed
。如果我使用ssh
部分运行它,它会打印It worked
。为了简化,我尝试了以下操作:
ssh <user>@<server> <<EOF
false
echo $?
EOF
发生了同样的事情。如果我复制粘贴或者输入这些命令,它会打印出1
,但是如果我运行全部(包括 ssh
),它会打印出0
。
如果我直接这样使用bash,也会出现相同的错误。
bash <<EOF
false
echo $?
EOF
或者
bash -c "false; echo $?"
为什么会发生这种情况?我该如何在此情境下检查上一个命令是否失败?
command || echo "it failed"
或者command && echo "it succeeded"
会有所帮助。 - Rambo Ramon