我想从bash脚本控制日志记录。我是脚本编写的新手,并继承了一个脚本:
LOG_STDOUT=/tmp/stdout.$$
LOG_STDERR=/tmp/stderr.$$
exec 3>&1
exec 4>&2
exec 1>${LOG_STDOUT}
exec 2>${LOG_STDERR}
set -x
echo $0 $SCRIPTREV starting $(date) >&3
...
echo ERRORMESS > &4
整体重定向当然可以通过将执行者置于条件中来控制,但我不知道如何管理>& 3和>& 4重定向。
处理这个问题的好方法是什么,所以日志文件通常收集-x的所有输出,但是可选地允许我将所有输出都输出到控制台?
由于
答案 0 :(得分:0)
您可以通过使用输出变量来避免更改exec语句:
[ $STD -eq 1 ] && LOG_STDOUT=/dev/stdout || LOG_STDOUT=/tmp/stdout.$$
[ $STD -eq 1 ] && LOG_STDOUT=/dev/stderr || LOG_STDERR=/tmp/stderr.$$
...
答案 1 :(得分:0)
感谢putnamhill的好建议。
实际上我已经意识到这是一个愚蠢的问题。所有我需要做的只是将条件放在第三和第四个exec语句周围(我有条件围绕所有的执行)。这样,>& 3和>& 4被重定向到& 1和& 2所以不是问题。
这是我避免这个问题的方法:
LOG_STDOUT=/tmp/stdout.$$
LOG_STDERR=/tmp/stderr.$$
exec 3>&1
exec 4>&2
if [[ $mydebug ]]; then
echo NOT REDIRECTING
else
exec 1>${LOG_STDOUT}
exec 2>${LOG_STDERR}
fi