Разобьем >> /dev/null 2>&1
утверждение на части:
Часть 1: >>
перенаправление вывода
Это используется для перенаправления вывода программы и добавления вывода в конец файла. Больше...
Часть 2: /dev/null
специальный файл
Это специальный файл псевдо-устройств .
Команда ls -l /dev/null
выдаст вам детали этого файла:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
Вы наблюдали crw
? Это означает, что это файл псевдоустройства, относящийся к типу специальных символов, который обеспечивает последовательный доступ.
/dev/null
принимает и отбрасывает все входные данные; не производит вывод (всегда возвращает указание конца файла при чтении). Ссылка: Википедия
Часть 3: 2>&1
дескриптор файла
Всякий раз, когда вы выполняете программу, операционная система всегда открывает три файла: стандартный ввод, стандартный вывод и стандартную ошибку, как мы знаем, всякий раз, когда файл открывается, операционная система (из ядра ) возвращает неотрицательное целое число, называемое дескриптором файла . Дескриптор файла для этих файлов - 0, 1 и 2 соответственно.
Так 2>&1
просто говорит перенаправить стандартную ошибку на стандартный вывод.
&
означает, что все, что следует, является дескриптором файла, а не именем файла.
Короче говоря, с помощью этой команды вы говорите своей программе не кричать во время выполнения.
Какова важность использования 2>&1
?
Если вы не хотите выводить какие-либо данные, даже в случае возникновения ошибки в терминале. Чтобы объяснить более четко, давайте рассмотрим следующий пример:
$ ls -l > /dev/null
Для вышеприведенной команды вывод не был напечатан в терминале, но что, если эта команда выдает ошибку:
$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory
Несмотря на то, что я перенаправляю вывод /dev/null
, он печатается в терминале. Это потому, что мы не перенаправляем вывод ошибок /dev/null
, поэтому для того, чтобы перенаправить вывод ошибок, необходимо добавить 2>&1
:
$ ls -l file_doesnot_exists > /dev/null 2>&1
>&- 2>&-
.