Solaris 10およびSolaris 11で、エポック以降の秒数を取得しようとしています。
Solaris 11では、「date + % s」はbashからの出力を提供しますが、Solaris 10でも失敗します。
Solaris 10で正しいコマンドは何ですか?
答え1
私は以下を使用しますnawk
:
nawk "BEGIN{print srand}"
POSIXシェルでより簡単になる移植性(例:/usr/xpg4/bin/sh
Solaris 10):
command -p awk 'BEGIN{srand(); print srand()}'
(Solaris 10では、Bourne/bin/sh
シェルが派生し、それを呼び出して/usr/xpg4/bin/awk
標準awk
(/bin
70年代の古い標準)を取得したり、古代ユーティリティよりも優先順位を持つことを含む標準ユーティリティPATH=`getconf PATH`${PATH+:$PATH}
に対して作業を実行したりできます。他のほとんどのツールはまだそうです。)awk
/bin/sh
/bin
答え2
perl
インストールされていると仮定すると、通常この状態に戻ります。
perl -e 'print time."\n";'
例えば、
$ perl -e 'print time."\n";'
1457531088
インストールされていると仮定すると、perl
OSに拘束されません。
答え3
Solaris 10と11の両方が最小インストールでない限りzshに付属しているため(この場合はbashには付属していません)、特殊変数から現在のエポック時間に切り替えることができます$EPOCHSECONDS
。モジュールがロードされましたzsh/datetime
。
$ zmodload zsh/datetime
$ echo $EPOCHSECONDS
1684393493
このモジュールには、人間の表現にフォーマットを付けたり、人間の表現をエポック秒に戻すことがstrftime
できる組み込み関数も付属しています。$EPOCHSECONDS
-r
Solaris 11ksh
およびSolaris 10ではsh
(グラフィック環境が利用可能な場合)(以前のバージョンではありますが)ベースである必要があります。組み込み関数は日付形式を指定して解析することもできます。ksh93
/usr/dt/bin/dtksh
ksh93
ksh93
printf
printf '%(%s)T\n' now
秒単位のエポック時間を提供する必要があります。now
一般的なアメリカ人表現、一部のISO仕様、またはcrontab時間仕様など、他の一般的な日付仕様でもあります。
bash
これのサブセットは4.2(構文解析部分ではなく形式化部分のみ)からコピーされ、$EPOCHSECONDS
zshは5.0()からコピーされましたstrftime
。