您可以为整个 Bash 会话重定向 STDERR 吗?
Can you redirect STDERR for an entire Bash session?
关于为单个命令或脚本重定向 stderr
和 stdout
有很多问题。我想要的是将任何 stderr 消息从我的 Bash 会话重定向到日志文件。
我想要一个交互式 bash 会话,其中所有 stderr
都被重定向到一个文件。
是的。
exec 2> elsewhere
或重定向调用命令。
不是一个确切的答案,但这是我使用的。它将在屏幕上显示 STDERR,并将所有 STDOUT 和 STDERR 记录到日志中:
eval 2>&1 >>~/max.log | tee --append ~/bash.log
处理你的问题的糟糕方法:
exec 3>&2
trap 'exec 2>>/path/to/your_file' DEBUG
PROMPT_COMMAND='exec 2>&3'
exec 3>&2
:我们先把fd 2复制到一个新的fd(这里是fd 3)
trap 'exec 2>/dev/null' DEBUG
:在执行每个命令之前(如果设置了 shell 选项 extdebug
,这是交互式 shells 中的默认设置),DEBUG
trap 被执行:这里我们将 stderr
重定向到文件 /path/to/your_file
(确保你给出了一个绝对路径)。
- 在显示每个提示之前,Bash执行
PROMPT_COMMAND
变量中的字符串:这里我们将fd2重定向到fd3(fd3指向终端时是fd2的副本)。这是打印提示所必需的。
我不认为这是一种可靠或不错的方法,但它可能会达到您的目的。
关于为单个命令或脚本重定向 stderr
和 stdout
有很多问题。我想要的是将任何 stderr 消息从我的 Bash 会话重定向到日志文件。
我想要一个交互式 bash 会话,其中所有 stderr
都被重定向到一个文件。
是的。
exec 2> elsewhere
或重定向调用命令。
不是一个确切的答案,但这是我使用的。它将在屏幕上显示 STDERR,并将所有 STDOUT 和 STDERR 记录到日志中:
eval 2>&1 >>~/max.log | tee --append ~/bash.log
处理你的问题的糟糕方法:
exec 3>&2
trap 'exec 2>>/path/to/your_file' DEBUG
PROMPT_COMMAND='exec 2>&3'
exec 3>&2
:我们先把fd 2复制到一个新的fd(这里是fd 3)trap 'exec 2>/dev/null' DEBUG
:在执行每个命令之前(如果设置了 shell 选项extdebug
,这是交互式 shells 中的默认设置),DEBUG
trap 被执行:这里我们将stderr
重定向到文件/path/to/your_file
(确保你给出了一个绝对路径)。- 在显示每个提示之前,Bash执行
PROMPT_COMMAND
变量中的字符串:这里我们将fd2重定向到fd3(fd3指向终端时是fd2的副本)。这是打印提示所必需的。
我不认为这是一种可靠或不错的方法,但它可能会达到您的目的。