2016-05-30 12 views
12

So che questo è stato un problema per un po 'e ho trovato molte discussioni a riguardo, ma non ho capito quale sarebbe stato finalmente un modo per farlo funzionare: pipe entrambi, stdout e stderr. In bash, questo sarebbe semplicemente:pipe entrambi, stdout e stderr nel guscio di pesce

cmd 2>&1 | cmd2 

risposta

15

Questa sintassi funziona anche nel pesce. Una demo:

$ function cmd1 
     sh -c 'echo "this is stdout"; echo "this is stderr" >&2' 
    end 

$ function cmd2 
     rev 
    end 

$ cmd1 | cmd2 
this is stderr 
tuodts si siht 

$ cmd1 2>&1 | cmd2 
rredts si siht 
tuodts si siht 

È inoltre possibile utilizzare cmd1 ^&1 | cmd2 di utilizzare il simbolo stderr reindirizzamento del pesce.

Documenti: https://fishshell.com/docs/current/index.html#redirects

+0

perfetti. si è scoperto che ho usato una versione precedente. –

+0

per reindirizzare a un file, 'echo meow>/tmp/meow 2> & 1' funziona per me. è necessario il reindirizzamento stderr dopo il reindirizzamento stdout. – nhooyr