Перенаправления и конвейеры bash
Насчет перенаправлений stdin, stdout, stderr: их, к слову, можно использовать в одну строку:
Bash
homework < data.in > results.out 2> err.msgs
В stdin команды homework попадает файл data.in
stdout - в results.out
stderr - в err.msgs
Чтобы объединить stderr с stdout - нужно:
Bash
homework < data.in > results.out 2>&1
# stderr(2) в stdout(&1)
Про амперсанд (&)
Если в примере выше не будет амперсанда (&) - stderr запишется в файл с названием 1
+ пример выше приведен просто для понимания в дальнейшем такого кода. Но есть более распространенная и удобная версия объединения stdout и stderr:
Bashhomework < data.in &> results.out
Соус: Книга "Bash и кибербезопасность" --> Глава 1. Работа с командной строкой --> Основы работы с командной строкой --> Перенаправление и конвейер