2015-10-17 11 views
6

często widzę poleceń takich jak:Kiedy mogę użyć | i w Bash? Czy można go używać w innych powłokach?

command1 |& command2 

Więc co robimy tutaj jest przekierować stderr do standardowego wejścia, tak że oboje „stają się” stdin do następnego elementu w rurze.

Albo lepiej opisane w Bash Reference manual -> Pipelines:

Rurociąg jest sekwencją prostych poleceń rozdzielonych jednym z operatorów kontroli „|” lub „| & ".

...

Jeśli |& służy, błąd standardowy Command1 jest, oprócz standardowe wyjście , jest podłączone do standardowego wejścia command2 przez rurę ; jest skrótem dla 2>&1 |. To niejawne przekierowanie standardowego błędu na standardowym wyjściu jest wykonywane po każdym przekierowaniu podanym w poleceniu przez .

Zastanawiam się jednak: czy ta składnia jest użyteczna we wszystkich wersjach Bash? To znaczy, czy zawsze jest wymienny z 2>&1 |? Czy można go również użyć w dowolnej innej powłoce (ksh, csh ...)?

+0

Twój tytuł i pytanie, które w końcu poprosił mnie wydaje się do dwóch różnych pytań TBH. Proponuję edytować tytuł – MohitC

+0

@MohitChandak masz rację. Zacząłem od tytułu, a następnie zbadałem temat. Zanim udało mi się rozwiązać pewne kwestie, pojawiły się inne pytania. Dokonam edycji, dzięki. – fedorqui

+0

jeśli chcesz wiedzieć, co jest możliwe do użycia w innych powłokach, lepiej wypróbuj tryb posix, ponieważ standardowy to jedyny sposób na zagwarantowanie, że jedna rzecz na pewno zadziała w innym systemie. – HuStmpHrrr

Odpowiedz

4

Ta funkcja jest dla Bash 4+ tylko:

|& (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


Należy również pamiętać, że checkbashisms skrypt oznaczy to także:

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

Source

+1

Wow, świetne badania Steven! – fedorqui