我想知道是否有一种方法可以获取自任何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兼容环境中。这个怎么运作:
POSIX
的awk
版本不是PATH
中的第一个,而被调用。 POSIX
standard:srand([expr])
将rand的种子值设置为expr,如果省略expr,则使用一天中的时间。应返回先前的种子值。
第一个调用是忽略参数,因此将种子值设置为一天中的时间。第二个调用返回一天中的那个时间,该时间是自该纪元以来的秒数。
请注意,对于许多
awk
实现,但不是GNU实现(gawk
),由于该函数已首先返回期望值,因此不需要此第一次调用。 关于shell - 在任何符合POSIX的shell中获得自纪元以来的秒数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2445198/