Solaris 10のエポック以来の秒

Solaris 10のエポック以来の秒

Solaris 10およびSolaris 11で、エポック以降の秒数を取得しようとしています。

Solaris 11では、「date + % s」はbashからの出力を提供しますが、Solaris 10でも失敗します。

Solaris 10で正しいコマンドは何ですか?

答え1

私は以下を使用しますnawk

nawk "BEGIN{print srand}"

POSIXシェルでより簡単になる移植性(例:/usr/xpg4/bin/shSolaris 10):

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

(Solaris 10では、Bourne/bin/shシェルが派生し、それを呼び出して/usr/xpg4/bin/awk標準awk/bin70年代の古い標準)を取得したり、古代ユーティリティよりも優先順位を持つことを含む標準ユーティリティPATH=`getconf PATH`${PATH+:$PATH}に対して作業を実行したりできます。他のほとんどのツールはまだそうです。)awk/bin/sh/bin

答え2

perlインストールされていると仮定すると、通常この状態に戻ります。

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

例えば、

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

インストールされていると仮定すると、perlOSに拘束されません。

答え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/dtkshksh93ksh93printf

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

秒単位のエポック時間を提供する必要があります。now一般的なアメリカ人表現、一部のISO仕様、またはcrontab時間仕様など、他の一般的な日付仕様でもあります。

bashこれのサブセットは4.2(構文解析部分ではなく形式化部分のみ)からコピーされ、$EPOCHSECONDSzshは5.0()からコピーされましたstrftime

関連情報