2015-10-17 58 views
6

我經常看到這樣的命令:什麼時候可以在Bash中使用|&?它可用於其他shell嗎?

command1 |& command2 

所以我們在這裏做的是標準錯誤重定向到標準輸入,讓他們都「成爲」標準輸入到管道中的下一個元素。

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

管道是由 控制操作中的一個分隔簡單命令的序列「|」或「| &'。

...

如果使用|&,命令1的標準錯誤,除了其 標準輸出,被連接到通過所述管 命令2的標準輸入;它是2>&1 |的簡寫。標準輸出的標準錯誤 的這種隱式重定向是在命令指定的任何 重定向之後執行的。

不過,我想知道:是這樣的語法使用在所有的Bash版本?也就是說,它總是可以與2>&1 |互換嗎?它是否也可以用於任何其他shell(ksh,csh ...)?

+0

你的標題,並最終你會問這個問題似乎是TBH兩個不同的問題給我。我建議編輯標題 – MohitC

+0

@MohitChandak你是對的。我從標題開始,然後調查了這個話題。在我整理出一些東西的時候,還提出了其他問題。將編輯它,謝謝。 – fedorqui

+0

如果你想知道什麼是可用的其他shell,你最好試用posix模式的shell,因爲標準是唯一的方法來保證一件事肯定會在另一個系統中工作 – HuStmpHrrr

回答

4

此功能僅適用於猛砸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

+1

哇,偉大的研究史蒂文! – fedorqui

相關問題