-3

我明白了| 将第一个命令的输出通过管道传输到第二个命令的标准输入。& 如何关联两个过程?

4

3 回答 3

8

可能您想知道&&not &(用于在后台执行命令)

这个命令:

command1 | command2

表示将 command1 的输出作为 command2 的输入(stdin)传递

但是在这个命令中:

command1 && command2

表示仅当 command1 成功时才执行 command2

于 2013-11-09T10:22:07.850 回答
4

单个符号(&)用于背景。它使命令在后台运行。

也来自man bash

如果命令由控制运算符 & 终止,则 shell 在子 shell 的后台执行命令。shell 不等待命令完成,返回状态为 0。

所以如果你写这样的东西:

find -name hello &

这将使find命令被分叉并在后台运行

在你的情况下,单一的 & 与这两个过程没有任何关系。

您可能正在寻找

command1 && command2
于 2013-11-09T10:20:25.017 回答
4

&不以任何方式关联两个过程;它在“后台”启动一个进程,以便您正在运行的 shell 继续其工作,而无需像往常一样等待进程终止。

你大概在想&&。命令行

command 1 && command 2

首先执行command 1,如果成功(状态码为 0 退出),则执行command 2. 复合的退出状态是第一个命令的退出状态,如果不成功,否则退出状态2。

例如,以下命令行可用于从源代码安装 Unix 软件,但前提是它已成功配置、编译并运行所有测试。

./configure && make && make test && make install
于 2013-11-09T10:22:31.393 回答