我已经部署了一个post-receive hook脚本,我希望将整个输出日志作为以date开头的块获取。我尝试了一种方法,但它采用逐行日志,这意味着我必须对每一行放置该命令以获取日志。从date开始,有没有办法获取整个脚本日志?
脚本文件如下所示:
#!/bin/bash
any_command | ts '[%F %T]' >> /home/Man/Man_log.log
second_command | ts '[%F %T]' >> /home/Man/Man_log.log
third_command | ts '[%F %T]' >> /home/Man/Man_log.log
看到我必须将此行| ts '[%F %T]' >> /home/Man/Man_log.log
放在每个命令上以获取日志。我有90行,所以这不是一个完美的方法。我需要一种有效的方法,比如我的脚本中只有一行将整个脚本的输出作为日志,并将其存储到从日期开始的另一个Man_log.log文件中。
我想要的是与此相似的。
#!/bin/bash
ts '[%F %T]' >> /home/Man/Man_log.log #a command which can store logs of every command below this to a separate file starting with date
any_command
second_command
third_command
答案 0 :(得分:1)
最简单的方法可能是修改脚本以便每次调用日期:
(date && anycommand) >> out.log
如果您无法修改脚本,那么您可以对命令进行分组,例如:
parse()
在括号中对(命令列表)进行分组会使它们像执行单个单元一样执行。 “sub-shell”
答案 1 :(得分:0)
假设这是应该给我们一些日志的脚本:
#!/bin/bash
echo "log_line1
log_line2
log_line3
log_line4"
让我们称之为script.sh
。
以./script.sh | printf "%(%F)T {\n$(cat)\n}" >> Man_log.log
身份运行,Man_log.log
的内容将是:
2018-05-04 {
log_line1
log_line2
log_line3
log_line4
}
现在让我解释管道的确切含义。
%(%F)T
将替换为当前日期年 - MONTH - DAY 格式$(cat)
是./script.sh
输出的日志。通常,它是作为标准输入接收的数据。
基本上./script.sh
将其日志写入标准输出。然后管道将该标准输出传递给echo
的标准输入。不带参数的cat
运行与cat /dev/stdin
相同。