Расширенные свойства перенаправления
Опубликовано: 29.09.2018

Использование дескрипторов файла
Существует три типа I/O (ввода-вывода), которые имеют свои собственные идентификаторы, называемые дескрипторами файла:
стандартный ввод: 0 стандартный вывод: 1 стандартная ошибка: 2
В следующих описаниях, если номер дескриптора файла не указан, и первый символ перенаправления оператор <, перенаправление ссылается на стандартный ввод (дескриптор файла 0). Если первый символ перенаправления оператор >, перенаправление ссылается на стандартный вывод (дескриптор файла 1).
Пересылать почту gmail на несколько адресов
Некоторые практические примеры внесут больше ясности:
ls > dirlist 2>&1
направит как стандартный вывод, так и стандартную ошибку в файл dirlist, в то время как команда
ls 2>&1 > dirlist
направит только стандартный вывод в dirlist. Это может быть полезным вариантом для программистов.
Autocad Architecture: как можно разбить оси под здание
Существует сложность: не следует путать использование амперсанда здесь с использованием его в разделе "Интерактивные процессы" , где амперсанд используется для запуска процесса в фоновом режиме. В данном случае он просто служит признаком того, что число, которое следует за ним, является не именем файла, а местом, на которое указывается потоку данных. Также отметим, что символ "больше, чем" не должен быть отделен пробелами от номера дескриптора файла. Если он будет отделен, мы снова укажем на вывод в файл. Пример ниже демонстрирует это:
[[email protected] /var/tmp]$ ls 2> tmp [[email protected] /var/tmp]$ ls -l tmp -rw-rw-r-- 1 nancy nancy 0 Sept 7 12:58 tmp [[email protected] /var/tmp]$ ls 2 > tmp ls: 2: No such file or directoryПервая команда, которую выполняет nancy, правильна (даже несмотря на отсутствие ошибок, и поэтому файл, в который перенаправлялась стандартная ошибка пуст). Вторая команда предполагает, что 2 - это имя файла, которого в данном случае нет, поэтому отображается ошибка.
Все эти особенности подробно описаны в info-страницах Bash.Примеры
Анализ ошибок
Если ваш процесс порождает много ошибок, есть способ тщательно их изучить:
command 2>&1 | less
Такое часто используется при создании нового программного обеспечения с использованием команды make , так как здесь:
andy:~/newsoft> make all 2>&1 | less --output ommitted--Отделение стандартного вывода от стандартной ошибки
Конструкции подобные этим часто используется программистами, в результате вывод отображается в одном окне терминала, а ошибки в другом. Сначала выясняется, какой псевдо терминал вы используете выдачей команды tty .
andy:~/newsoft> make all 2> /dev/pts/7Одновременная запись в вывод и в файлы
Вы можете использовать команду tee для копирования ввода на стандартный вывод и один или несколько выходных файлов за один раз. Использование опции -a c tee в результате добавляет ввод в файл(ы). Эта команда полезна, если вы хотите как увидеть, так и сохранить вывод. Операторы > и >> не позволяют выполнить оба действия одновременно.
Этот инструмент обычно называется подачей на конвейер (|), что демонстрируется в следующем примере:
mireille ~/test> date | tee file1 file2 Thu Jun 10 11:10:34 CEST 2004 mireille ~/test> cat file1 Thu Jun 10 11:10:34 CEST 2004 mireille ~/test> cat file2 Thu Jun 10 11:10:34 CEST 2004 mireille ~/test> uptime | tee -a file2 11:10:51 up 21 days, 21:21, 57 users, load average: 0.04, 0.16, 0.26 mireille ~/test> cat file2 Thu Jun 10 11:10:34 CEST 2004 11:10:51 up 21 days, 21:21, 57 users, load average: 0.04, 0.16, 0.26Новости







