Перенаправление stdout и stderr в Linux с оператором |&
В Linux оператор конвейера (|) очень полезен, если вы хотите перенаправить вывод одной команды в качестве входных данных для следующей команды для дальнейшей обработки:
$ cat data.txt | grep "No such file"
Однако этот оператор не перенаправляет ошибки. Поэтому, если файл не существует, команда grep в приведённом выше примере не найдет совпадений.
А что, если вам нужно перенаправить и обработать как ошибки, так и обычный вывод? 🤔
Вот тут и пригодится оператор перенаправления |&.
Этот оператор отправляет как стандартный вывод (stdout), так и стандартные ошибки (stderr) первой команды через конвейер в стандартный ввод (stdin) второй команды. Посмотрите этот пример:
$ cat data.txt |& grep "No such file"
Обратите внимание на разницу: теперь команда grep смогла найти совпадение.
Оператор |& в Bash — это сокращённая форма для оператора перенаправления 2>&1 |:
$ cmd-1 2>&1 | cmd-2
👉 @i_odmin