Solaris 10 中自纪元以来的秒数

Solaris 10 中自纪元以来的秒数

我试图获取 Solaris 10 和 Solaris 11 中自纪元以来的秒数。

在 Solaris 11 上,“date +%s”为我提供了输出(来自 bash),但在 Solaris 10 上同样失败。

Solaris 10 中正确的命令是什么?

答案1

我会用nawk

nawk "BEGIN{print srand}"

在 POSIX shell 中更容易移植(例如/usr/xpg4/bin/sh在 Solaris 10 上):

command -p awk 'BEGIN{srand(); print srand()}'

(在 Solaris 10 上,/bin/shBourne shell 就是从它而来的,您可以调用它/usr/xpg4/bin/awk来获得一个标准awk/bin70 年代的一个古老的标准),或者PATH=`getconf PATH`${PATH+:$PATH}为标准实用程序做一些事情,包括awk优先于古老的实用程序;这也适用到 Solaris 11,它/bin/sh不再是一个古老的 shell,但大多数其他工具/bin仍然是)。

答案2

perl假设它已安装,我通常会恢复到此状态。

perl -e 'print time."\n";'

例如,

$ perl -e 'print time."\n";'
1457531088

假设perl已安装,它应该与操作系统几乎无关。

答案3

Solaris 10 和 11 都应该附带 zsh,只要它不是最小安装(在这种情况下它也不会附带 bash),因此您可以切换到当前纪元时间位于特殊变量中$EPOCHSECONDS。已经加载了zsh/datetime模块。

$ zmodload zsh/datetime
$ echo $EPOCHSECONDS
1684393493

该模块还带有一个strftime内置函数,可以将其格式化$EPOCHSECONDS为人类表示或将-r人类表示转换回纪元秒。

在 Solaris 11 中,ksh和在 Solaris 10 中,sh(如果图形环境可用)应该基于(尽管是一个古老的版本)。的内置函数还可以格式化和解析日期。ksh93/usr/dt/bin/dtkshksh93ksh93printf

printf '%(%s)T\n' now

应该给你以秒为单位的纪元时间。now可以是其他一些常见的日期规范,包括美国常见的人类表示、一些 ISO 规范,甚至是 crontab 时间规范。

bash在 4.2 中复制了其中的一个子集(仅格式化部分,而不是解析部分),$EPOCHSECONDS在 5.0 中复制了 zsh(不是strftime)。

相关内容