如果第一个命令失败,则执行两个命令

如果第一个命令失败,则执行两个命令

我正在编写一个 script.sh,如下所示:

ls a || ls > /dev/null || echo "both command fails"; exit 3
echo 5 # not showed up

我希望exit 3仅当 command1 和 command2 都失败时才执行。但似乎即使ls > /dev/null没问题,exit 3仍然被解雇从而使echo 5从未出现过。

我能做些什么来解决这个问题吗?

答案1

问题是||绑定比 更紧密;,因此您的第一行由两个命令组成:第一个是复合命令:ls || ls || echo第二个只是exit 3。正如 meuh 的评论中提到的,你应该写

ls a || ls > /dev/null || { echo "both command fails"; exit 3; }
echo 5 # not showed up

相关内容