Что происходит под перенаправлением ошибок?

Читая о Linux, я получил следующее:

Поскольку stderr отличается от stdout, сообщения об ошибках по-прежнему будут отображаться в окнах терминала в приведенном выше примере.

Если вы хотите перенаправить stderr в отдельный файл, вы используете номер (2) дескриптора файла stderr, знак "больше" (>), за которым следует имя файла, в котором вы хотите сохранить все, что запущенная команда записывает в stderr:

$ do_something 2> error-file

Специальная стенограмма может быть использована для размещения чего-либо, записанного в файловый дескриптор 2 (stderr), в том же месте, что и файловый дескриптор 1 (stdout): 2> & 1

$ do_something > all-output-file 2>&1

bash допускает более простой синтаксис для вышеупомянутого:

$ do_something >& all-output-file

Вот do_something это какая-то команда. Я действительно не понимаю, что происходит внизу во всех трех командах, указанных выше. я знаю & используется для того, чтобы сделать процесс фоновым процессом, но я не понимаю логику. Я новичок в этом вкусе, пожалуйста, может кто-нибудь объяснить это?

1 ответ

Решение

Ваша путаница может быть из-за >& это совершенно другая вещь, чем &,

>& или же <& используются в перенаправлении, чтобы указать на дескриптор файла (fd). Вышеупомянутые случаи перенаправляют на 1 и 2, которые являются stdout и stderr соответственно.

> означает "перенаправить стандартный вывод"

2> означает "перенаправить fd 2 (stderr)"

>&2 означает "перенаправить стандартный вывод на fd 2 (stderr)". Обратите внимание, как это отличается от >2 что будет означать "перенаправить стандартный вывод в файл с именем 2"- вот почему & это важно. Это означает, что следующая вещь будет fd, а не имя файла.

Теперь, конечно, как вы заметили, если & сидит сам по себе без символа перенаправления, тогда это означает что-то совершенно другое - "немедленно вернись, выполни предыдущую команду в фоновом режиме".

Другие вопросы по тегам