这是我的脚本文件:
# 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
log_stdout_and_stderr first_script.log log "Started first_script.sh" # call second_script source second_script.sh log "Completed first_script.sh"
log_stdout_and_stderr second_script.log log "Started second_script.sh" log "Completed second_script.sh"
以下是我的输出日志:
Started main.sh Completed main.sh
Started first_script.sh
Started second_script.sh Completed second_script.sh Completed first_script.sh
我想在日志文件中logging如下所示的日志消息。
预期产出: –
Started main.sh Completed main.sh
Started first_script.sh Completed first_script.sh
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
进行存储。
为了避免这种情况:
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"
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
)。 以这种方式调用脚本,您需要为您调用的脚本添加执行权限。