shell - 在任何符合 POSIX 的 shell 中获取自纪元以来的秒数

标签 shell scripting time posix

我想知道是否有办法在任何符合 POSIX 的 shell 中获取自 UNIX 时代以来的秒数,而无需求助于非 POSIX 语言(如 perl),或使用非 POSIX 扩展(如 GNU awk 的 strftime 函数)。

这里有一些我已经排除的解决方案......

date +%s // Doesn't work on Solaris



我见过一些 shell scripts suggested之前,解析 date 的输出然后从格式化的公历日期派生秒,但他们似乎没有考虑闰秒等细节。

GNU awk 有 strftime功能,但这在标准中不可用 awk .

我可以编写一个小的 C 程序来调用 time函数,但二进制文件将特定于特定架构。

是否有仅使用 POSIX 兼容工具的跨平台方法来执行此操作?

我很想放弃并接受对 perl 的依赖,它至少被广泛部署。

perl -e 'print time' // Cheating (non-POSIX), but should work on most platforms

最佳答案

这是一个可移植/POSIX解决方案:

PATH=`getconf PATH` awk 'BEGIN{srand();print srand()}'

不像 C编译器或 Perl , awk保证存在于符合 POSIX 的环境中。

这个怎么运作:
  • 路径=`getconf 路径` 正在确保 POSIX awk 的版本被调用应该不是PATH 中的第一个.
  • POSIX standard :
    srand([expr])
    将 rand 的种子值设置为 expr 或如果省略 expr 则使用一天中的时间。应返回先前的种子值。

    第一次调用省略了一个参数,因此种子值设置为一天中的时间。第二个调用返回一天中的那个时间,这是自纪元以来的秒数。

    请注意,许多 awk实现而不是 GNU 实现( gawk ),不需要第一次调用,因为该函数首先已经返回了预期值。
  • 关于shell - 在任何符合 POSIX 的 shell 中获取自纪元以来的秒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2445198/

    相关文章:

    scripting - 如何在 "openssl s_client -connect"内强制退出?

    bash - bash 如何知道我的变量名在哪里结束?

    windows - 如何运行 PowerShell 脚本

    mysql - 我怎样才能使这个 mysql 查询更有效并运行得更快?

    MYSQL计算数字时间格式的日期差

    shell - powershell 命令未在 .bat 文件中运行?

    javascript - 将加载状态发送回客户端

    time - 如何将字符串转换为TimeHour24?

    bash - 在 Unix 上 grep 和 cut 之后在每行之前回显文本

    linux - mv 'x' 和 'y' 是同一个文件