我知道如何将stdout重定向到文件:
exec > foo.log
echo test
Run Code Online (Sandbox Code Playgroud)
这会将'test'放入foo.log文件中.
现在我想将输出重定向到日志文件并将其保存在stdout上
即它可以从脚本外部轻松完成:
script | tee foo.log
Run Code Online (Sandbox Code Playgroud)
但我想在脚本本身内声明它
我试过了
exec | tee foo.log
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我有一个bash脚本set -x.是否可以将此脚本的调试打印及其所有输出重定向到文件?理想情况下,我想做这样的事情:
#!/bin/bash
set -x
(some magic command here...) > /tmp/mylog
echo "test"
Run Code Online (Sandbox Code Playgroud)
得到了
+ echo test
test
Run Code Online (Sandbox Code Playgroud)
在/ tmp/mylog中输出,而不是在stdout中输出.
如果我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?