Что происходит под перенаправлением ошибок?
Читая о Linux, я получил следующее:
Поскольку stderr отличается от stdout, сообщения об ошибках по-прежнему будут отображаться в окнах терминала в приведенном выше примере.
Если вы хотите перенаправить stderr в отдельный файл, вы используете номер (2) дескриптора файла stderr, знак "больше" (>), за которым следует имя файла, в котором вы хотите сохранить все, что запущенная команда записывает в stderr:
$ do_something 2> error-fileСпециальная стенограмма может быть использована для размещения чего-либо, записанного в файловый дескриптор 2 (stderr), в том же месте, что и файловый дескриптор 1 (stdout): 2> & 1
$ do_something > all-output-file 2>&1bash допускает более простой синтаксис для вышеупомянутого:
$ do_something >& all-output-file
Вот do_something это какая-то команда. Я действительно не понимаю, что происходит внизу во всех трех командах, указанных выше. я знаю & используется для того, чтобы сделать процесс фоновым процессом, но я не понимаю логику. Я новичок в этом вкусе, пожалуйста, может кто-нибудь объяснить это?
1 ответ
Ваша путаница может быть из-за >& это совершенно другая вещь, чем &,
>& или же <& используются в перенаправлении, чтобы указать на дескриптор файла (fd). Вышеупомянутые случаи перенаправляют на 1 и 2, которые являются stdout и stderr соответственно.
> означает "перенаправить стандартный вывод"
2> означает "перенаправить fd 2 (stderr)"
>&2 означает "перенаправить стандартный вывод на fd 2 (stderr)". Обратите внимание, как это отличается от >2 что будет означать "перенаправить стандартный вывод в файл с именем 2"- вот почему & это важно. Это означает, что следующая вещь будет fd, а не имя файла.
Теперь, конечно, как вы заметили, если & сидит сам по себе без символа перенаправления, тогда это означает что-то совершенно другое - "немедленно вернись, выполни предыдущую команду в фоновом режиме".