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

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

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

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

Если вы хотите перенаправить stderr в отдельный файл, используйте номер файлового дескриптора stderr (2), знак «больше» (>), за которым следует имя файла, в котором вы хотите сохранить все, что запущенная команда записывает в 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некоторая команда. Я действительно не понимаю, что происходит внизу во всех 3 командах, указанных выше. Я знаю, &что используется для того, чтобы сделать процесс фоновым, но я не понимаю логику. Я новичок в этом деле. Может кто-нибудь объяснить это?

решение1

Ваше замешательство может быть вызвано тем, что >&это совершенно иное явление, чем &.

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

>означает «перенаправить stdout»

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

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

Конечно, как вы заметили, если a &стоит сам по себе без символа перенаправления, то это означает нечто совершенно иное — «немедленно вернуться, выполнить предыдущую команду в фоновом режиме».

Связанный контент