即当天产生的日志需要放到以“年月日”格式命名的目录中,而这个日期目录需要额外一个任务来创建,hmmm…觉得这种方式不够优雅…
但是标准输出或者错误输出的内容重定向到一个不存在的文件时,系统会自动地帮我们创建该文件,然而,如果该文件的父目录不存在,父目录并不会被自动创建,而是会报错退出。
要实现父目录不存在时自动创建的功能,意味着需要引入条件判断逻辑。
嗯,一个神奇的语句就要排上用场,'与'、'或' 实现 shell 中的 if…else 的语义
#判断目录 /tmp/abc 是否存在
[[ ! -d "/tmp/abc" ]] && echo "文件夹不存在" || echo "文件夹已经存在"
解释:
A && B :只有命令 A 执行成功($?为0),命令 B 才会执行。
C || D :只有命令 C 执行异常($?不为0),命令 D 才会执行。
#用 echo 模拟日志的产生,日志内容重定向到 /tmp/log/20190409/app.log,其中目录 20190409 不存在
echo "log_content" > `[[ ! -d "/tmp/log/$(date +"%Y%m%d")" ]] && mkdir -p /tmp/log/$(date +"%Y%m%d") && echo /tmp/log/$(date +"%Y%m%d")/app.log || echo /tmp/log/$(date +"%Y%m%d")/app.log`
#进一步简化
echo "log_content" > `p=/tmp/log/$(date +"%Y%m%d");[[ ! -d "${p}" ]] && mkdir -p ${p};echo ${p}/app.log`