Що означає 2> / dev / null?


Відповіді:


347

Оператор> перенаправляє вихідний файл зазвичай на файл, але це може бути на пристрій. Ви також можете використовувати >> для додавання.

Якщо ви не вказали число, тоді передбачається стандартний потік виводу, але ви також можете переспрямувати помилки

> fileredirects stdout to file
1> fileredirects stdout to file
2> fileredirects stderr to file
&> fileredirects stdout and stderr to file

/dev/nullце нульовий пристрій, він бере будь-який потрібний вхід і викидає його. З його допомогою можна придушити будь-який вихід.


6
Чи є різниця між > /dev/null 2>&1і&> /dev/null
Олександр Міллс

13
На практиці сьогодні я не думаю, що є 2>&1старший синтаксис, тому &>не працював би роки тому, але обидва є рівнозначними.
Уоррен Хілл

28

Коротше кажучи, він перенаправляє stderr(fd 2) до чорної діри (відкидає вихід команди).

Деякі більш поширені випадки використання для перенаправлення:

command > /dev/null 2>&1 &

Виконати commandу фоновому режимі, відкинути stdoutтаstderr

command >> /path/to/log 2>&1 &

Запустіть commandта додайте stdout та stderr до файлу журналу.

У Bash 4+ функціонує коротша (але менш читабельна) форма

command &>> /path/to/log

3
Чи є вагомі причини використовувати > /dev/null 2>&1замість цього &> /dev/null?
Крейг МакКуїн

7
@CraigMcQueen &>є новим у Bash 4, колишній - це лише традиційний спосіб, я просто так звик (легко запам’ятати).
Террі Ван

@CraigMcQueen, згідно з коментарем до цієї відповіді , &> /dev/nullможе не працювати в деяких оболонках, але> / dev / null 2> & 1 працюватиме у всіх оболонках, сумісних з POSIX.
Стік Underflow

3
Чому це 2> & 1, а не 2 & 1> ??
Маріенбад

1
@marienbad , що насправді питання стоїть розміщення :-) The синтаксису fn>target, де fnзнаходиться номер файлу (0-2 зазвичай, деякі програми визначають більше числа) і target, як правило , ім'я файлу , але тут це ще один Номер_файл - префікс , &який є синтаксис "Я хочу ввести номер файлу замість імені файлу".
toolforger

9

/dev/nullтрактується як чорна діра в Linux / Unix, тому ви можете вкласти що завгодно, але ви не зможете отримати це назад /dev/null.

Крім того, 2>означає, що ви перенаправляєте (тобто >) stderr (тобто 2) в чорну діру (тобто /dev/null)

Ваша команда:

grep -i 'abc' content 2>/dev/null 

Не намагайтеся закінчити інший нахил наперед, як це - 2>/dev/null/(це не каталог).


2

вміст grep -i 'abc' генерує вихід, який відображається на вашій консолі, включаючи будь-які помилки.

Якщо вказати 2>/dev/null, вилучите помилки, щоб вони не виводилися на вашу консоль.

Більш детально: 2 представляє дескриптор помилок, куди записуються помилки. За замовчуванням вони роздруковуються на консолі.

\> в цьому випадку переспрямовує вихід на вказане місце /dev/null

/dev/null є стандартним пристроєм Linux, куди ви надсилаєте вихід, який ви хочете проігнорувати.


Лаконічні та тематичні. Хороша відповідь.
Сергій Колодяжний
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.