我有一个包含set -x
的bash脚本。是否可以将此脚本的调试打印及其所有输出重定向到文件?理想情况下,我想做这样的事情:
#!/bin/bash
set -x
(some magic command here...) > /tmp/mylog
echo "test"
并获取
+ echo test
test
输出/ tmp / mylog,而不是stdout。
答案 0 :(得分:50)
这就是我刚用Google搜索的内容,我记得自己前一段时间使用过它......
使用exec重定向脚本中所有命令的标准输出和标准错误:
#!/bin/bash
logfile=$$.log
exec > $logfile 2>&1
要获得更多重定向魔法,请查看Advanced Bash Scripting Guide - I/O Redirection。
如果您还想在日志文件中的添加中查看终端上的输出和调试,请参阅redirect COPY of stdout to log file from within bash script itself。
如果您想独立于正常set -x
和STDOUT
处理STDERR
跟踪输出的目的地,请参阅bash storing the output of set -x to log file。
答案 1 :(得分:13)
-x
输出转到stderr,所以要记录它:
set -x
exec 2>/tmp/mylog
答案 2 :(得分:0)
要重定向 stderr 和 stdout :
exec &>> $LOG_FILE_NAME
如果要追加到文件。要覆盖文件:
exec &> $LOG_FILE_NAME
答案 3 :(得分:0)
在我的情况下,该脚本在其他地方被多次调用,但是我什么都没看到,所以我做了一个附加操作,它起作用了:
exec 1>>FILENAME 2>&1
set -x
为避免混淆,请确保在每次运行之前删除FILENAME。