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