我想做这样的事情:
if cmd1 && cmd2
echo success
else
echo epic fail
fi
我该怎么做呢?
答案1
这些应该可以满足您的需要:
cmd1 && cmd2 && echo success || echo epic fail
或者
if cmd1 && cmd2; then
echo success
else
echo epic fail
fi
答案2
问题中的伪代码与问题标题不对应。
如果有人需要真正知道如果命令 1 失败如何运行命令 2,这是一个简单的解释:
cmd1 || cmd2
:这将运行cmd1
,如果失败它也会运行cmd2
cmd1 && cmd2
:这将运行cmd1
,如果成功它将运行cmd2
cmd1 ; cmd2
:这将运行cmd1
,然后它将运行cmd2
,与运行的失败或成功无关cmd1
。
为了完整起见,在您的示例中您错过了then
关键字。您尝试显示的代码将写为
if cmd1 && cmd2; then echo success; else echo epic fail; fi
这相当于
((cmd1 && cmd2) && echo success) || echo epic fail
括号是可选的,因为左结合性。
注意,这些代码中,cmd2
只有运行成功才会运行cmd1
,否则直接回显失败。
答案3
Petr Uzel 说得很对,但你也可以玩神奇的 $?。
$?保存最后执行的命令的退出代码,如果使用它,您可以非常灵活地编写脚本。
这个问题有点涉及这个话题,使用 $ 的最佳实践?在bash中?。
cmd1
if [ "$?" -eq "0" ]
then
echo "ok"
else
echo "Fail"
fi
然后,如果您愿意,您还可以对不同的退出代码做出反应并执行不同的操作。