如果我set -x在我的 bash 会话(v4.1.2(2) - CentOS 6.10)中,我得到:
$ ls /root
+ ls --color=auto /root
ls: cannot open directory /root: Permission denied
Run Code Online (Sandbox Code Playgroud)
太好了,它回显了我运行并打印出终端的命令。这是预期的。现在,如果我都重定向stdout并stderr到另一个文件。
$ ls /root &> stuff.txt
+ ls --color=auto /root
Run Code Online (Sandbox Code Playgroud)
它仍然将命令打印到终端。
题
哪里set -x有bash的打印,如果它是不是stderr还是stdout?
lar*_*sks 10
该set -x命令将跟踪信息打印到stderr.
当您运行此命令时...
ls /root &> stuff.txt
Run Code Online (Sandbox Code Playgroud)
你只是重定向stdout和stderr对ls命令。您当前的shell也没有更改,这是您运行set -x.
正如 Mad Physicist 指出的那样,技术答案是“它记录到BASH_XTRACEFD”,默认为stderr. 您可以通过执行以下操作将当前 shell 的跟踪日志记录重定向到另一个文件:
# open a new file descriptor for logging
exec 4> trace.log
# redirect trace logs to fd 4
BASH_XTRACEFD=4
# enable tracing
set -x
Run Code Online (Sandbox Code Playgroud)