代码之家  ›  专栏  ›  技术社区  ›  Jacquelyn.Marquardt

在bash shell中将多个命令链接在一起

  •  1
  • Jacquelyn.Marquardt  · 技术社区  · 7 年前

    我正在学习C类,如果用C编写的每个程序成功,则必须返回0。

    现在想象一下,我有3个用C编写的程序,可以做任何你喜欢的事情,但它们都成功了,所以它们都返回0。

    我有一个关于操作系统如何处理这个返回值的问题。

    考虑在Bash shell中将这三个命令链接在一起,当且仅当前两个命令成功时才执行第三个命令。

    (command1 && command2) && command3
    

    然而,如果command1和command2都成功,它们都会返回0,因此我不知道这个机制是如何工作的,因为0和任何使其始终为0(false)的东西。 所以command3不会执行。。(command2也不会)

    提前感谢

    2 回复  |  直到 7 年前
        1
  •  1
  •   Inian    7 年前

    理由是有一种方法( 0 )命令要成功,但有许多方法(任何非零整数)会失败。不要将bash对退出状态的使用与标准的布尔解释(0为false,非零为true)混淆。shell if语句检查其命令是否成功。

    && 不是您正在思考的布尔运算符。的退出状态 command1 && command2 0 (成功)如果两者 command1 command2 退出状态为 0 如果 命令1 具有非零(故障)退出状态,即复合命令的退出状态(实际上, 命令2 根本不运行)。如果 命令1 成功,然后 命令2 执行,复合命令的退出状态为 命令2

    还要记住不要将复合命令执行与算术执行运算符混淆 (( ... )) ,这是一个特殊命令,其内容作为算术表达式计算,如果表达式具有非零值,则退出状态为0,如果表达式等于0,则退出状态为1。(不要被诱惑去想 ((…)) 但在某种程度上等同于逻辑NOT。)

        2
  •  0
  •   akuller    7 年前

    可以使用if语句。

    if [ `command1` -eq 0 ] && [ `command2` -eq 0 ]; then command3; fi