在bash中获取当前日期而不生成子流程

时间:2016-03-25 16:26:17

标签: bash subprocess

这个问题纯属好奇心。通过从bash运行date命令很容易获得日期,但它是一个外部可执行文件,需要生成一个子进程。我想知道是否有可能在没有子进程的情况下格式化当前时间/日期。我只能在PS1HISTTIMEFORMAT的上下文中找到对日期/时间格式的引用。后者允许这样做:

HISTTIMEFORMAT="%Y-%m-%d_%H:%M:%S "
history -s echo
x=$(history)
set -- $x
date="$2"

这很接近,但$(history)产生了一个子进程,据我所知。

我们可以做得更好吗?

2 个答案:

答案 0 :(得分:2)

bash 4.2为printf引入了新的说明符;如果没有给出参数,则在bash 4.3中扩展以使用当前时间。 %()T使用括号内显示的格式扩展到当前时间。

$ printf '%(%Y-%m-%d_%H:%M:%S)T\n'
2016-03-25_12:38:10

答案 1 :(得分:1)

使用Linux和GNU bash 4:

#!/bin/bash

while IFS=: read -r a b; do 
  [[ $a =~ rtc_time ]] && t="${b// /}"
  [[ $a =~ rtc_date ]] && d="${b// /}"
done < /proc/driver/rtc

echo "$d $t"

输出:

2016-03-26 08:03:09