我想将 stderr 永久重定向到 /dev/tty12,这样当我在 tty1 中执行某些操作时,错误消息就不会触动我的神经。
重定向应该通过 init.d 或 ~/.bashrc 或 ~./bash_profile。仅一次。
可以做到吗?如何做到?
答案1
这似乎是一个非常糟糕的想法,而且我怀疑系统是否提供了实现此方法的方法。
每当创建一个进程时,调用进程都会确定其 stdin、stdout 和 stderr 的指向位置。必须有一种通用方法来覆盖它——而且它会破坏任何明确重定向 stderr 的机制。
例如,如果您输入:
some_command >some_command.out 2>some_command.err
的 stderr应该some_command
转到some_command.err
,还是/dev/tty12
?
我能想到的最接近的事情就是调用一个重定向了 stderr 的 shell:
bash -l 2>/dev/tty12
在我的(简短)实验中(重定向到文件而不是 tty),这会导致 shell 无法交互。添加-i
会强制它进行交互 - 但 shell 提示符显然会打印到 stderr。
当然,您可以将 stderr 重定向到单个命令(假设您没有使用csh
或tcsh
):
some_command 2>some_command.err
你也可以定义一个 shell 函数来为你做这些事情:
e() { "$@" 2>/dev/tty12 ; }
然后,对于每个想要重定向 stderr 的命令,只需e
在命令前面添加:
e some_command
答案2
许多 shell 将其交互提示写入 stderr,因此如果您将 shell 的 stderr 重定向到 ,则与 shell 交互时可能会遇到麻烦/dev/tty12
。此外,错误消息很重要。为什么要忽略它们?