Bash中的"|&"是什么意思?

97
例如
echo "aaa" |& cat

这里的|&是什么意思?

有没有推荐的网站可以查找这些内容?因为大多数搜索引擎不支持特殊字符搜索。


1
请注意:如果bash --versionGNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14),则echo "aaa" |& cat可能会导致-bash: syntax error near unexpected token \&'`。 - pmor
4个回答

93

来自man 1 bash,章节Pipelines

[时间 [-p]] [ ! ] 命令 [ [|⎪|&] 命令2 ... ]

如果使用 |&,则 命令 的标准输出和标准错误都通过管道连接到 命令2 的标准输入。

因此,它就像管道运算符 |,但同时传递标准输出标准错误


2
@BallpointBen 没错。来自 https://www.gnu.org/software/bash/manual/bash.pdf 的内容:如果使用“|&”,则除了标准输出之外,command1的标准错误还通过管道连接到command2的标准输入;这是“2>&1 |”的简写形式。 - SantaXL
1
@SantaXL 值得注意的是,|& 并不被广泛支持,最好使用 2>&1 | 来获得更好的在不同平台和不同 Linux 发行版上的 shell 支持。 - WinEunuuchs2Unix

20

这个操作符将左侧的标准输出和标准错误都传输到右侧。

Bash 参考手册 包含了所有操作符的综合索引,您可以在其中查找这些操作符。


6
如果使用'|&',则command1的标准错误输出将通过管道连接到command2的标准输入中,除了已经连接的标准输出之外。这相当于 '2>&1 |' 的简写形式。在任何由该命令指定的重定向之后,会执行将标准错误输出隐式重定向到标准输出的操作。

2

command1 |& command2 等同于 command1 2>&1 | command2


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接