【问题标题】:When can I use |& in Bash? Is it usable in other shells?我什么时候可以在 Bash 中使用 |&?它可以在其他shell中使用吗?
【发布时间】:2015-10-18 08:44:25
【问题描述】:

我经常看到这样的命令:

command1 |& command2

所以我们在这里所做的就是将 stderr 重定向到 stdin,这样它们都“成为”stdin 到管道中的下一个元素。

或者更好的描述在Bash Reference manual -> Pipelines

管道是一系列简单命令,由其中一个命令分隔 控制运算符“|”或“|&”。

...

如果使用|&,command1 的标准错误,除了它的 标准输出,通过连接到 command2 的标准输入 管道;它是2>&1 | 的简写。这种隐式重定向 标准输出的标准错误是在任何之后执行的 命令指定的重定向。

但是,我想知道:这种语法是否适用于所有 Bash 版本?也就是说,它总是可以与2>&1 | 互换吗?是否也可以在任何其他 shell(ksh、csh...)中使用?

【问题讨论】:

  • 您的标题和您最终提出的问题对我来说似乎是两个不同的问题。我建议编辑标题
  • @MohitChandak 你是对的。我从标题开始,然后调查了这个话题。当我把一些事情整理好时,其他问题又出现了。将编辑它,谢谢。
  • 如果你想知道什么可以在其他shell中使用,你最好尝试一下shell的posix模式,因为标准是保证一个东西在另一个系统中肯定可以工作的唯一方法跨度>

标签: bash shell


【解决方案1】:

此功能仅适用于 Bash 4+:

|& (bash4)

Source


dd. The parser now understands `|&' as a synonym for `2>&1 |', which redirects the standard
    error for a command through a pipe.

Source


还要注意 checkbashisms 脚本也会标记它:

'\s\|\&' =>                    q<pipelining is not POSIX>,

Source

【讨论】:

  • 哇,伟大的研究史蒂文!
猜你喜欢
  • 2017-05-14
  • 1970-01-01
  • 2013-03-24
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
相关资源
最近更新 更多