在 Bash 脚本中将格式化的日期行输出打印到文件

Printing formatted date line output to file in Bash script

这是 follow-up 我在此线程上发布的前一个问题:

到目前为止,我使用以下行将日期标题附加到日志文件,稍后我将更多数据添加到:

date '+---%a %b %e %H:%M:%S %Z %Y---' >> "./Logs/Log.txt"

除了我想在 header 上方和下方添加一个空行以更好地区分文本与标题外,这工作正常。我假设我会简单地在某处添加一个“\n”,但是将它放入日期命令的格式字符串中只是将它逐字附加到文件中的文本中。

编辑:

当我运行执行上述命令时,我在日志文件中得到以下输出:

---Wed Aug 21 14:09:33 EDT 2019---

但我想做的是在上面一行前后添加一个空行space输出数据。

更新:

好的,感谢用户 Léa Gris 的反馈。更正后的行现在显示为:

date '+%n---%a %b %e %H:%M:%S %Z %Y---%n' >> "./Logs/Log.txt"

在行尾和行首添加%n

date '+%n---%a %b %e %H:%M:%S %Z %Y---%n' >> Log.txt

来自man dateman,你最好的朋友)

%n     a newline

省去尝试欺骗 date 格式化非日期相关数据的麻烦。

您可以在此处文档中使用命令替换作为一个简单的小模板:

cat >> "./Logs/Log.txt" << EOF

--- $(date) ---
Yours truly, $(whoami)

EOF

您已标记此 bash,但 date 命令是操作系统的一部分,而不是 shell 中的内置命令。

如果您是 运行 bash 版本 4 或更高版本(您可以 echo $BASH_VERSION 进行检查),那么您可以使用 printf 内置的日期格式命令。

尝试:

printf '\n---%(%a %b %e %H:%M:%S %Z %Y)T---\n\n'

或者只是为了好玩:

printf '%(%n---%+---%n%n)T'

请注意,如果您将其他占位符添加到您的 printf 格式中,您需要为这次指定一个实际数字,或者 -1 为 "now":

printf '\n---%(%+)T--- %s\n\n' -1 "Hello"