【问题标题】:Restrict logging for a particular child shell script限制特定子 shell 脚本的日志记录
【发布时间】:2016-06-29 10:41:00
【问题描述】:

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

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 的日志记录,有没有办法做到这一点?

【问题讨论】:

  • 您显示的代码并未告诉我们您如何运行这些脚本或如何生成它们的日志。如果这是一个编排脚本,它将所有其他脚本作为子进程单独运行,请丢弃您不希望输出的标准错误(和/或标准输出)。
  • 你列举的trap 信号真的很奇怪。你想在这里完成什么?
  • 我有一个父脚本,它只是调用所有子脚本。上面的代码用于生成日志。在调用子脚本之前,我在父脚本中有这个日志代码。我只想排除一个子脚本的日志生成,因为它的日志很重,我只想要一个用于整个过程的日志文件。
  • 您正在重申问题中已经存在的内容,而不是澄清任何内容。当我们不得不猜测您的实际代码是什么样子时,这里的赏金并没有多大帮助。请edit您的问题向我们展示您在需要帮助的实际代码中正在做什么。
  • 我已经更新了问题。

标签: linux shell logging


【解决方案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"

【讨论】:

  • 感谢三重奏。关于“$4”,是的,它可以包含换行符。
  • 如果你的脚本是一个 Bash 脚本,那么像logFile="$scriptfolder/log/${4//$'[\r\n]'/}_log_ImportMain_$dateTime.log"这样的操作更经济
  • 谢谢,我也试试。我还是 shell 脚本的新手 :)
猜你喜欢
  • 2011-06-22
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2018-01-20
相关资源
最近更新 更多