it-swarm.cn

重击:如果command1失败,请运行command2

我想做这样的事情:

if cmd1 && cmd2
echo success
else
echo epic fail
fi

我该怎么办?

51
michelemarcon

这些应该可以满足您的需求:

cmd1 && cmd2 && echo success || echo epic fail

要么

if cmd1 && cmd2; then
    echo success
else
    echo epic fail
fi
79
Petr Uzel

彼得·乌泽尔(Petr Uzel)随处可见,但您也可以玩魔术$?。

$?保留最后执行的命令的退出代码,如果使用此代码,则可以非常灵活地编写脚本。

这个问题有点触动了这个话题, 在bash中使用$?的最佳实践?

cmd1 
if [ "$?" -eq "0" ]
then
  echo "ok"
else
  echo "Fail"
fi

然后,您还可以对不同的退出代码做出反应,并根据需要执行不同的操作。

25
Johan

问题中的伪代码与问题的标题不对应。

如果有人在命令1失败时实际上需要知道如何运行命令2,这是一个简单的解释:

  • cmd1 || cmd2:它将运行cmd1,并且在失败的情况下将运行cmd2
  • cmd1 && cmd2:它将运行cmd1,如果成功,它将运行cmd2
  • cmd1 ; cmd2:它将运行cmd1,然后将运行cmd2,而与运行cmd1的成功与否无关。
17
Orlando Rivera Letelier