Я хочу постоянно перенаправлять stderr в /dev /tty12, чтобы сообщения об ошибках не трогали меня, когда я что-то делал в tty1.
Перенаправление должно проходить через init.d или ~/.bashrc или ~./Bash_profile. Только раз.
Можно ли это сделать и как?
Я хочу постоянно перенаправлять stderr в /dev /tty12, чтобы сообщения об ошибках не трогали меня, когда я что-то делал в tty1.
Перенаправление должно проходить через init.d или ~/.bashrc или ~./Bash_profile. Только раз.
Можно ли это сделать и как?
Похоже, действительно плохая идея, и я сомневаюсь, что система предоставляет способ сделать это.
Всякий раз, когда процесс создается, вызывающий процесс определяет, куда будут направлены его 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
Многие оболочки пишут свои интерактивные запросы в stderr, поэтому у вас могут возникнуть проблемы с взаимодействием с оболочкой, если вы перенаправите ее stderr в /dev/tty12
. Кроме того, сообщения об ошибках важны. Зачем их игнорировать?