web-dev-qa-db-ja.com

Bashスクリプトでタイムスタンプ変数を作成する

ロギングをもう少し簡単にするために、シェルスクリプトでタイムスタンプ変数を作成しようとしています。スクリプトの最初に変数を作成し、echo $timestampを発行するたびに現在の時刻を表示します。思ったより難しいことがわかった。これが私が試したいくつかのことです:

timestamp="(date +"%T")" echoは(date +"%T")を印刷します

timestamp="$(date +"%T")" echoは、変数が初期化された時刻を表示します。

私が試した他のことは、これ以上うまくいかなかったほんのわずかなバリエーションです。誰かが私がやろうとしていることを達成する方法を知っていますか?

304
Dan

現在のタイムスタンプを取得し、固定変数が定義されている時間を取得するには、関数を使用し、 not 変数を使用するのがトリックです。

#!/bin/bash

# Define a timestamp function
timestamp() {
  date +"%T"
}

# do something...
timestamp # print timestamp
# do something else...
timestamp # print another timestamp
# continue...

%T指定子によって与えられるフォーマットが気に入らない場合は、dateによって受け入れられる他の時間変換指定子を組み合わせることができます。 GNU dateの場合、これらの指定子の完全なリストはこちらの公式ドキュメントにあります。 https://www.gnu.org/software/coreutils/manuals/html_node/Time-conversion-spec .html#時間変換指定子

245
giordano

あなたがUNIXのタイムスタンプを取得したい場合は、あなたが使用する必要があります:

timestamp=$(date +%s)

%Tはあなたにちょうど時間を与えます。 %H:%M:%Sと同じです( http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/ を介して)

475
dchakarov
DATE=`date "+%Y%m%d"`

DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too
38

ISO 8601形式(2018-12-23T12:34:56)は、UNIXタイムスタンプより読みやすくなっています。ただし、OSによっては、ファイル名に:を含めることができません。したがって、代わりにこのようなものを使用することをお勧めします。

2018-12-23_12-34-56

この形式のタイムスタンプを取得するには、次のコマンドを使用できます。

date +%Y-%m-%d_%H-%M-%S

これは私が多くのアプリケーションで使われているフォーマットです。これについてもう一つのいいところは、あなたのファイル名がこれで始まっていれば、アルファベット順にソートすることができ、日付順にソートされるということです。

19
Caner

コマンド置換を使用してください。

timestamp=$( date +%T )
15
choroba

私はubuntu 14.04を使っています。

私のシステムでの正しい方法はdate +%sです。

date +%Tの出力は12:25:25のようです。

10
Sean Lin

あなたが使用することができます

timestamp=`date --rfc-3339=seconds`

これは2014-02-01 15:12:35-05:00の形式で配信されます。

バックティック(`)文字はそれらの間にあるものを評価させ、結果を行に含めます。 date --helpには他のオプションがあります。

9
Bill

最近のバージョンのbashでは、外部プログラムdateを呼び出す必要はありません。

printf -v timestamp '%(%T)T'

%(...)Tは、対応する引数をUNIXタイムスタンプとして使用し、括弧内のstrftimeスタイルの形式に従ってフォーマットします。引数-1は現在時刻に対応し、あいまいさが生じない場合は省略できます。

2
chepner
timestamp=$(awk 'BEGIN {srand(); print srand()}')

値のないsrandは、ほとんどのAwk実装で現在のタイムスタンプを使います。

1
Steven Penny