【问题标题】:Getting the current date in bash without spawning a sub-process在 bash 中获取当前日期而不产生子进程
【发布时间】:2016-07-13 10:36:41
【问题描述】:

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

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

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

我们可以做得更好吗?

【问题讨论】:

    标签: bash subprocess


    【解决方案1】:

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

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

    【讨论】:

    • 酷。我应该阅读我机器的 man bash 而不是 linux.die.net/man/1/bash 。很好,使用printf -v date,我将日期放入变量中以供进一步使用。
    【解决方案2】:

    使用 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

    【讨论】:

      猜你喜欢
      • 2010-12-14
      • 2016-08-05
      • 2013-08-04
      • 2023-02-08
      • 1970-01-01
      • 2011-01-23
      • 2015-04-28
      • 2012-07-30
      • 2019-12-05
      相关资源
      最近更新 更多