编写shell脚本时如何记录执行人、执行时间及执行命令到日志文件
调整方案
你需要调整日志时间格式、补全日志拼接内容,同时将日志记录逻辑改为执行脚本时自动触发,不用单独调用log参数即可完成日志写入,修改要点如下:
- 脚本开头先定义必要的全局变量,避免
logfile、submitfolder未定义报错 - 修改
date命令的格式,匹配你需要的「日/月/年 - 时:分」结构 - 用
$0获取当前脚本名,$*获取所有传入参数,拼接出完整的执行命令 - 把日志写入逻辑提到
case判断之前,只要脚本执行就自动写日志,覆盖所有操作场景
#!/bin/bash # 全局变量定义,路径可根据实际需求修改 submitfolder="./submit_dir" logfile="./log.txt" help() { echo "$1 syntax is $1 <option>" echo "" echo "where the option is one of the following" echo " -l -- to print all file u already summited"; echo "log -- to log" } list() { ls -l $submitfolder; } # 调整后的日志写入函数 write_log() { NOW=$(date '+%d/%m/%Y - %H:%M') # 按需求拼接日志内容,示例为你给出的格式,需要加执行人可改为 "$NOW - $USER - $0 $*" echo "$NOW - $0 $*" >> $logfile } # 执行业务逻辑前先写入日志,覆盖所有执行场景 write_log $@ case $1 in l | -l) list $@;; log) echo "日志已记录";; help | -help | --help) help $@;; *) input $@;; # 注意此处input函数未给出定义,需自行补全避免报错 esac
如果你需要把执行人字段明确放到日志里,只需要修改日志写入行的拼接规则即可,调整后日志格式会同时包含时间、执行人、执行命令三个你需要的字段。
内容的提问来源于stack exchange,提问作者UnbutuisFree
相关产品推荐
相关产品推荐

