Я хочу постоянно перенаправлять stderr в /dev /tty12, чтобы сообщения об ошибках не трогали меня, когда я что-то делал в tty1.

Перенаправление должно проходить через init.d или ~/.bashrc или ~./Bash_profile. Только раз.

Можно ли это сделать и как?

2 ответа2

0

Похоже, действительно плохая идея, и я сомневаюсь, что система предоставляет способ сделать это.

Всякий раз, когда процесс создается, вызывающий процесс определяет, куда будут направлены его stdin, stdout и stderr. Должен быть общий способ переопределить это - и он сломает любые механизмы, которые перенаправляют stderr явно.

Например, если вы введете:

some_command >some_command.out 2>some_command.err

должен some_command stderr some_command перейти в some_command.err или в /dev/tty12?

Самое близкое, что я могу придумать, это вызвать оболочку с перенаправленным stderr:

bash -l 2>/dev/tty12

В моих (кратких) экспериментах (перенаправление в файл, а не в tty) это приводит к тому, что оболочка неинтерактивна. Добавление -i заставляет его быть интерактивным, но подсказка оболочки, по-видимому, выводится в stderr.

Конечно, вы можете перенаправить stderr для отдельных команд (при условии, что вы не используете csh или tcsh):

some_command 2>some_command.err

и вы можете определить функцию оболочки, которая сделает это за вас:

e() { "$@" 2>/dev/tty12 ; }

Затем для каждой команды, чей stderr вы хотите перенаправить, просто добавьте e к команде:

e some_command
0

Многие оболочки пишут свои интерактивные запросы в stderr, поэтому у вас могут возникнуть проблемы с взаимодействием с оболочкой, если вы перенаправите ее stderr в /dev/tty12 . Кроме того, сообщения об ошибках важны. Зачем их игнорировать?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .