Розбимо >> /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>&-
.