В Linux оператор конвейера (|) очень полезен, если вы хотите перенаправить вывод одной команды в качестве входных данных для следующей обработки:
$ cat data.txt | grep "Такого файла нет"
Однако это не перенаправляет ошибки. Поэтому, если файл не существует, команда grep, указанная выше, не вернёт совпадение.
Что делать, если вы хотите перенаправить и обработать как ошибки, так и нормальный вывод 🤔
Вот тут-то и пригодится оператор перенаправления «|&».
Этот оператор отправляет стандартный вывод (stdout) и стандартный поток ошибок (stderr) первой команды по каналу на стандартный ввод (stdin) второй команды. Взгляните на этот пример:
$ cat data.txt |& grep "Такого файла нет"
Обратите внимание на разницу: команда grep смогла получить совпадение.
Оператор «|&» в bash является сокращением для оператора перенаправления «2>&1 |».
$ cmd-1 2>&1 | cmd-2
#linux
