как печатать для нескольких файлов по-разному? [dубликат]

Вы можете попробовать Unetbootin

Binaries:

Unetbootin

64bit

Репозиторий PPA не работает Я работаю (по крайней мере, для меня), поэтому я не публикую его.

Сегодня я пробовал это (для Kubuntu 15.10), но безуспешно. Пожалуйста, опубликуйте свои результаты позже.

167
задан 18 May 2015 в 16:42

4 ответа

Есть два основных потока вывода в Linux (и других ОС), стандартный вывод (стандартный вывод) и стандартная ошибка (stderr). Сообщения об ошибках, например те, которые вы показываете, печатаются со стандартной ошибкой. Классический оператор перенаправления (command > file) перенаправляет только стандартный вывод, поэтому стандартная ошибка все еще отображается на терминале. Чтобы перенаправить stderr, у вас есть несколько вариантов:

Перенаправить stdout в один файл и stderr в другой файл: command > out 2>error Перенаправить stderr в stdout (&1), а затем перенаправить stdout в файл : command >out 2>&1 Перенаправить оба файла: command &> out

Для получения дополнительной информации о различных операторах управления и перенаправления см. здесь.

226
ответ дан 18 July 2018 в 03:36

Есть два основных потока вывода в Linux (и других ОС), стандартный вывод (стандартный вывод) и стандартная ошибка (stderr). Сообщения об ошибках, например те, которые вы показываете, печатаются со стандартной ошибкой. Классический оператор перенаправления (command > file) перенаправляет только стандартный вывод, поэтому стандартная ошибка все еще отображается на терминале. Чтобы перенаправить stderr, у вас есть несколько вариантов:

Перенаправить stdout в один файл и stderr в другой файл: command > out 2>error Перенаправить stderr в stdout (&1), а затем перенаправить stdout в файл : command >out 2>&1 Перенаправить оба файла: command &> out

Для получения дополнительной информации о различных операторах управления и перенаправления см. здесь.

227
ответ дан 24 July 2018 в 17:53

Прежде всего следует отметить, что существует несколько способов в зависимости от вашей цели и оболочки, поэтому это требует небольшого понимания нескольких аспектов. Наиболее типично, через 2> в Bourne-подобных оболочках, таких как dash (который символически связан с /bin/sh) и bash; сначала это стандартная и POSIX-совместимая оболочка, а другая - то, что большинство пользователей используют для интерактивного сеанса. Они отличаются синтаксисом и функциями, но, к счастью, перенаправление потока ошибок работает одинаково (кроме &> нестандартного). В случае csh и его производных перенаправление stderr не работает там.

Вернемся к части 2>. Следует отметить два ключевых момента: > означает оператор перенаправления, в котором мы открываем файл, а 2 integer обозначает дескриптор файла stderr; на самом деле это точно, как стандарт POSIX для языка оболочки определяет перенаправление в Bourne-подобных оболочках :

[n]redir-op word

Для простого перенаправления > подразумевается целое число 1 для stdout, т. е. echo Hello World > /dev/null является тем же самым, что и echo Hello World 1>/dev/null. Обратите внимание, что оператор integer или redirection не может быть процитирован, иначе оболочка не распознает их как таковой и вместо этого рассматривает как литеральную строку текста. Что касается интервала, важно, чтобы целое число было рядом с оператором перенаправления, но файл может быть либо рядом с оператором перенаправления, либо нет, то есть command 2>/dev/null и command 2> /dev/null будут работать нормально.

Несколько упрощенным синтаксисом для типичной команды в shell будет

command [arg1] [arg2] 2> /dev/null

. Трюк здесь в том, что перенаправление может появляться где угодно. Это и 2> command [arg1], и command 2> [arg1] действительны. Обратите внимание, что для оболочки bash существует &> способ перенаправления потоков stdout и stderr в одно и то же время, но опять же - это специфичный для bash, и если вы стремитесь к переносимости скриптов, это может не сработать. См. Также Ubuntu Wiki и dash .

Примечание. Оператор перенаправления > обрезает файл и перезаписывает его, если файл существует. [F25] можно использовать для добавления файла stderr в файл.

Если вы заметили, > предназначен для одной команды. Для скриптов мы можем перенаправить поток stderr всего скрипта извне, как в myscript.sh 2> /dev/null, или мы можем использовать Ubuntu Wiki . Встроенный модуль exec имеет возможность перепрограммировать поток для всего сеанса оболочки, так сказать, интерактивно или через скрипт. Что-то вроде

#!/bin/sh exec 2> ./my_log_file.txt stat /etc/non_existing_file

В этом примере файл журнала должен показывать stat: cannot stat '/etc/non_existing_file': No such file or directory.

Еще один способ - через функции. Как заметил в своем ответе kopciuszek, мы можем написать объявление функции с уже прикрепленным перенаправлением, то есть

some_function(){ command1 command2 } 2> my_log_file.txt
3
ответ дан 18 July 2018 в 03:36

Прежде всего следует отметить, что существует несколько способов в зависимости от вашей цели и оболочки, поэтому это требует небольшого понимания нескольких аспектов. Наиболее типично, через 2> в Bourne-подобных оболочках, таких как dash (который символически связан с /bin/sh) и bash; сначала это стандартная и POSIX-совместимая оболочка, а другая - то, что большинство пользователей используют для интерактивного сеанса. Они отличаются синтаксисом и функциями, но, к счастью, перенаправление потока ошибок работает одинаково (кроме &> нестандартного). В случае csh и его производных перенаправление stderr не работает там.

Вернемся к части 2>. Следует отметить два ключевых момента: > означает оператор перенаправления, в котором мы открываем файл, а 2 integer обозначает дескриптор файла stderr; на самом деле это точно, как стандарт POSIX для языка оболочки определяет перенаправление в Bourne-подобных оболочках :

[n]redir-op word

Для простого перенаправления > подразумевается целое число 1 для stdout, т. е. echo Hello World > /dev/null является тем же самым, что и echo Hello World 1>/dev/null. Обратите внимание, что оператор integer или redirection не может быть процитирован, иначе оболочка не распознает их как таковой и вместо этого рассматривает как литеральную строку текста. Что касается интервала, важно, чтобы целое число было рядом с оператором перенаправления, но файл может быть либо рядом с оператором перенаправления, либо нет, то есть command 2>/dev/null и command 2> /dev/null будут работать нормально.

Несколько упрощенным синтаксисом для типичной команды в shell будет

command [arg1] [arg2] 2> /dev/null

. Трюк здесь в том, что перенаправление может появляться где угодно. Это и 2> command [arg1], и command 2> [arg1] действительны. Обратите внимание, что для оболочки bash существует &> способ перенаправления потоков stdout и stderr в одно и то же время, но опять же - это специфичный для bash, и если вы стремитесь к переносимости скриптов, это может не сработать. См. Также Ubuntu Wiki и dash .

Примечание. Оператор перенаправления > обрезает файл и перезаписывает его, если файл существует. [F25] можно использовать для добавления файла stderr в файл.

Если вы заметили, > предназначен для одной команды. Для скриптов мы можем перенаправить поток stderr всего скрипта извне, как в myscript.sh 2> /dev/null, или мы можем использовать Ubuntu Wiki . Встроенный модуль exec имеет возможность перепрограммировать поток для всего сеанса оболочки, так сказать, интерактивно или через скрипт. Что-то вроде

#!/bin/sh exec 2> ./my_log_file.txt stat /etc/non_existing_file

В этом примере файл журнала должен показывать stat: cannot stat '/etc/non_existing_file': No such file or directory.

Еще один способ - через функции. Как заметил в своем ответе kopciuszek, мы можем написать объявление функции с уже прикрепленным перенаправлением, то есть

some_function(){ command1 command2 } 2> my_log_file.txt
3
ответ дан 24 July 2018 в 17:53

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

Похожие вопросы: