我想知道是否有一种方法可以获取自任何POSIX兼容 shell 中的UNIX纪元以来的秒数,而无需求助于诸如perl之类的非POSIX语言,或使用诸如GNU awk的strftime函数之类的非POSIX扩展。

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



我以前看过shell scripts suggested,它们先解析date的输出,然后从格式化的公历日期中得出秒,但是它们似乎并没有考虑到leap秒等细节。

GNU awk具有strftime函数,但这在标准awk中不可用。

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

是否有一种仅使用POSIX兼容工具的跨平台方法可以做到这一点?

我很想放弃并接受对Perl的依赖,而Perl至少已得到广泛部署。

最佳答案

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

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

C编译器或Perl不同,保证awk存在于POSIX兼容环境中。

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

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

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

    10-14 03:20