В 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
👉 DevOps Portal
