限制特定子shell脚本的日志记录

时间:2016-06-29 10:41:00

标签: linux shell logging

我通过一个主要的父脚本运行一堆脚本。我在父脚本中添加了日志代码,如下所示:

exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>logFileName 2>&1

这会为所有子脚本生成日志。我想跳过一个特定脚本的日志生成,因为它的日志有时很重。

有没有办法做到这一点?非常感谢!

我的父脚本如下所示:

mkdir -p $scriptFolder/log
logFile="$scriptFolder/log/$(echo "$4" | tr -d '\n\r')_log_ImportMain_$dateTime.log"
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>$logFile 2>&1
source $scriptFolder/shellscripts/1.copyFilesFromFTP.sh
source $scriptFolder/shellscripts/2.import.sh
source $scriptFolder/shellscripts/3.export.sh
source $scriptFolder/shellscripts/4.copyFilesToFTP.sh

我想跳过3.export.sh的日志记录,有没有办法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

您没有将脚本作为子进程运行,您的问题意味着使用“父”术语,但无论如何,您可以为该单个命令进行另一次重定向,如下所示:

mkdir -p "$scriptFolder"log       # notice quoting
logFile="$scriptFolder/log/$(echo "$4" | tr -d '\n\r')_log_ImportMain_$dateTime.log"
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3 15  # notice addition of 15
exec 1>"$logFile" 2>&1            # notice quoting here, too
source $scriptFolder/shellscripts/1.copyFilesFromFTP.sh
source $scriptFolder/shellscripts/2.import.sh
# Temporarily disable logging for this source statement
source $scriptFolder/shellscripts/3.export.sh >/dev/null 2>&1
source $scriptFolder/shellscripts/4.copyFilesToFTP.sh

>/dev/null 2>&1在第三个source语句的持续时间内有效,文件描述符在完成后将恢复到之前的状态。

顺便说一下,你真的确定"$4"可以包含嵌入的换行符,并且你想在那种情况下删除它们吗?无论如何,echo的尾随换行都会被删除,所以也许你只想要logfile="$scriptfolder/log/${4}_log_ImportMain_$dateTime.log"