如何使用不同的文件名在不同的shell脚本文件中loggingstdout和stderr

这是我的脚本文件:

main.sh

# Log stdout and stderr log_stdout_and_stderr() { # Close STDOUT file descriptor exec 1<&- # Close STDERR FD exec 2<&- # Open STDOUT as $1 file for read and write. exec 1<>$1 # Redirect STDERR to STDOUT exec 2>&1 } Log a single line log() { echo "[$(date)]: $*" } log_stdout_and_stderr main.log log "Started main.sh" log "Completed main.sh" # call first_script source first_script.sh 

first_script.sh

 log_stdout_and_stderr first_script.log log "Started first_script.sh" # call second_script source second_script.sh log "Completed first_script.sh" 

second_script.sh

 log_stdout_and_stderr second_script.log log "Started second_script.sh" log "Completed second_script.sh" 

以下是我的输出日志:

main.log

 Started main.sh Completed main.sh 

first_script.log

 Started first_script.sh 

second_script.log

 Started second_script.sh Completed second_script.sh Completed first_script.sh 

我想在日志文件中logging如下所示的日志消息。

预期产出: –

main.log

 Started main.sh Completed main.sh 

first_script.log

 Started first_script.sh Completed first_script.sh 

second_script.log

 Started second_script.sh Completed second_script.sh 

我从first_script.sh调用second_script.sh文件。 我想将second_script.sh中使用的日志消息存储在second_script.log中

我该怎么做? 让我知道是否有人不清楚这个问题。

您正在使用source来从main脚本调用脚本。 源脚本意味着它由当前的shell本身解析和执行。 就好像您在main脚本中输入了脚本的内容。 即:

second_script.sh内调用second_script.sh时,以下内容相当于:

first_script.sh

 log_stdout_and_stderr first_script.log log "Started first_script.sh" # call second_script ####### second_script.sh called with sourcing ####### log_stdout_and_stderr second_script.log log "Started second_script.sh" log "Completed second_script.sh" ###################################################### log "Completed first_script.sh" 

由于该脚本将按顺序执行,日志将按照最后一次调用的log_stdout_and_stderr进行存储。

为了避免这种情况:

  1. first_script.sh修改为:
 log_stdout_and_stderr first_script.log log "Started first_script.sh" #call second_script source second_script.sh log_stdout_and_stderr first_script.log log "Completed first_script.sh" 
  1. 或者使用脚本的完整路径从脚本中调用另一个脚本:
 log_stdout_and_stderr first_script.log log "Started first_script.sh" # call second_script /path/to/second_script.sh log "Completed first_script.sh" 

这样你就可以调用另一个bash shell来执行另一个脚本(在本例中是second_script.sh )。 以这种方式调用脚本,您需要为您调用的脚本添加执行权限。