Bash Shell输出带日期的日志

Bash Shell输出带日期的日志,你希望输出日志或其他行时能加上日期,但同时又想避免 date 命令所带来的开销。

解决方案

对于 bash 4 或以上版本,可以使用 printf '%(fmt)T' 来输出日期和时间。

printf '%(%F %T)T; Foo Bar\n' '-1'

你也可以用 printf 为变量赋值,这样就可以轻松地重复使用结果了。

printf -v today '%(%F)T' '-1'    # 设置$today = '2014-11-15'

讨论

参数 ‘-1’ 很重要,但并不一致!bash 手册页中是这么说的:

有两个特殊的参数值可以使用:-1 代表当前时间,-2 代表 shell 被调用的时间。

但是这种默认行为在 bash 4.2 和 4.3 期间发生了变化。在 4.2 版本中,空参数被视为空(null),然后返回 Unix 纪元的当地时间,这肯定不是你想要的。4.3 版本中的一处特例使得空参数被视为 ‘-1’。例如:

$ echo $BASH_VERSION

## (1)-release

$ printf '%(%F %T %Z)T; Foo Bar\n'
1969-12-31 19:00:00 EST; Foo Bar

$ printf '%(%F %T %Z)T; Foo Bar\n' '-1'
2014-11-15 15:24:26 EST; Foo Bar

$ echo $BASH_VERSION

## (1)-release

$ printf '%(%F %T %Z)T; Foo Bar\n'
2014-11-15 15:25:02 EST; Foo Bar

$ printf '%(%F %T %Z)T; Foo Bar\n' '-1'
2014-11-15 15:25:05 EST; Foo Bar

bash 中的 printf 是内建命令,但还有一个名为 printf 的独立二进制可执行文件,两者并不是一回事。独立的可执行文件适用于那些没有内建 printf 的 shell。因此,可别把 printf 的手册页与 bash 手册页中的 printf 部分搞混了。虽然两者之间有很大的相似性,但后者才是你需要的。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!