我试图获取 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/sh
Bourne shell 就是从它而来的,您可以调用它/usr/xpg4/bin/awk
来获得一个标准awk
(/bin
70 年代的一个古老的标准),或者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/dtksh
ksh93
ksh93
printf
printf '%(%s)T\n' now
应该给你以秒为单位的纪元时间。now
可以是其他一些常见的日期规范,包括美国常见的人类表示、一些 ISO 规范,甚至是 crontab 时间规范。
bash
在 4.2 中复制了其中的一个子集(仅格式化部分,而不是解析部分),$EPOCHSECONDS
在 5.0 中复制了 zsh(不是strftime
)。