Bash - перенаправление стандартного вывода

Оболочка Bash является самой популярной оболочкой в системах Linux, и чтобы эффективно использовать эту оболочку, вам нужно немного знать о перенаправлениях оболочки Bash. 

В этой заметке мы покажем, как перенаправить стандартный вывод и стандартную ошибку в один и тот же файл в командной строке оболочки Bash. Будет приведено несколько примеров, чтобы вы могли выбрать подходящий метод в любом сценарии. Сначала рассмотрим, как перенаправить стандартный вывод в файл. Если вы уже знаете основы Bash, переходите к примерам команд.

Обычно для перенаправления используется >, а для добавления в существующий файл - >>.

$ echo "crimea-karro.ru" > new-file.txt

AND

$ echo "crimea-karro.ru" >> existing-file.txt

С помощью этих команд стандартный вывод перенаправляется в файл, а стандартная ошибка отображается на экране. Если вы новичок в Linux, "стандартный вывод" - это обычный, ожидаемый вывод при выполнении команды или сценария, а "стандартная ошибка" - это любые возникающие сообщения об ошибках. Чтобы перенаправить стандартную ошибку, мы можем использовать 2>. В результате стандартный вывод появится на экране, а все сообщения об ошибках будут отправлены в файл.

$ echo "crimea-karro.ru" 2> new-file.txt

Теперь мы рассмотрим различные примеры команд для перенаправления стандартного вывода и стандартной ошибки в один и тот же файл. Чтобы перенаправить стандартный вывод и стандартную ошибку в один и тот же файл, используйте следующий синтаксис команды. В частности, добавьте 2>&1 в конец вашей обычной команды. 

$ echo "crimea-karro.ru" > new-file.txt 2>&1

Несколько проще добиться этой функциональности с помощью оператора &>. Обратите внимание, что это отлично работает в Bash и zsh, но не в других оболочках, поэтому используйте предыдущий пример для максимальной совместимости с другими системами. 

$ echo "crimea-karro.ru" &> new-file.txt

Чтобы добавить стандартный вывод и стандартную ошибку к уже существующему файлу, используйте тот же синтаксис, что и выше, но с оператором перенаправления >>. 

$ echo "crimea-karro.ru" >> existing-file.txt 2>&1

Чтобы подавить стандартный вывод и стандартную ошибку в терминале и избежать генерации файла, вы можете перенаправить их в /dev/null. 

$ echo "crimea-karro.ru" > /dev/null 2>&1

Чтобы перенаправить стандартный вывод в один файл, а стандартную ошибку - в другой файл, используйте следующий синтаксис. 

$ echo "crimea-karro.ru" 2> std-err.txt 1> std-out.txt

Если вы хотите перенаправить стандартный вывод и стандартную ошибку в один и тот же файл, а также увидеть их оба в терминале, нам поможет команда tee. 

$ echo "crimea-karro.ru" 2>&1 | tee new-file.txt

Если вы хотите видеть стандартный вывод и стандартную ошибку на экране, одновременно добавляя их в один и тот же файл, мы можем использовать опцию -a (append) в tee. 

$ echo "crimea-karro.ru" 2>&1 | tee -a existing-file.txt

В этой заметке мы рассмотрели, как перенаправить стандартный вывод и стандартную ошибку в один и тот же файл в Bash. Это включало несколько различных операторов Bash, в зависимости от того, хотим ли мы создать новый файл или добавить его к существующему. Мы также узнали, как использовать команду tee, чтобы видеть стандартный вывод и стандартную ошибку на терминале и одновременно записывать их в файл.


Bash — усовершенствованная и модернизированная вариация командной оболочки Bourne shell. 

 

Последние материалы