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