关于将stderr
和stdout
重定向到单个命令或脚本的问题有很多疑问。我想要的是将Bash会话中的任何stderr
消息重定向到日志文件中。
我希望有一个交互式的bash会话,其中所有的stderr
都被重定向到一个文件中。
一种可怕的解决问题的方式:
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
,在交互式shell中默认设置),都会执行DEBUG
陷阱:这里我们将stderr
重定向到文件/path/to/your_file
(确保给出绝对路径)。PROMPT_COMMAND
变量中的字符串:这里我们将fd2重定向到fd3(当它指向终端时,fd3是fd2的副本)。这是必要的以打印提示符。我不认为这是一种健壮或好的方法,但它可能适合您的目的。
是的。
exec 2> elsewhere
或者重定向调用命令。
这不是一个确切的答案,但这是我使用的方法。它将在屏幕上显示 STDERR 并将所有的 STDOUT 和 STDERR 记录到日志中:
eval $1 2>&1 >>~/max.log | tee --append ~/bash.log
eval $1
是你想要的。也许你的意思是 eval "$1"
,但这也是非常值得怀疑的。 - rici
exec 2>file
吗? - gniourf_gniourfstderr
。 - Etan Reisnerssh
来做这件事的。不要在你的问题中添加太多噪音(到第二段中间我就想关闭选项卡了)。所以:你想要一个交互式的Bash会话,其中stderr
被重定向到一个文件中?如果是这样的话,剪切掉所有无用的东西,只包括这些信息。 - gniourf_gniourf