Трубы как, stdout, так и stderr в раковине рыбы

Я знаю, что это было проблемой на некоторое время, и я нашел много дискуссий об этом, но я не понял, что было бы, наконец, способом сделать это: pipe both, stdout и stderr. В bash это будет просто:

cmd 2>&1 | cmd2

Ответ 1

Этот синтаксис работает и в рыбе. Демонстрация:

$ 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

Вы также можете использовать cmd1 ^&1 | cmd2 для использования символа перенаправления рыбы stderr.

Документы: https://fishshell.com/docs/current/index.html#redirects