2016-03-25 10 views
2

この質問は純粋な好奇心です。 dateコマンドをbashから実行すると日付を取得するのは簡単ですが、外部実行可能ファイルであり、サブプロセスを生成する必要があります。私は、現在の時刻/日付をサブプロセスなしでフォーマットすることが可能かどうか疑問に思った。私は、PS1HISTTIMEFORMATの文脈でしか日付/時刻フォーマットへの参照を見つけることができませんでした。後者は、このことができます:サブプロセスを生成せずにbashで現在の日付を取得する

HISTTIMEFORMAT="%Y-%m-%d_%H:%M:%S " 
history -s echo 
x=$(history) 
set -- $x 
date="$2" 

これは近づくが、$(history)は、私の知る限り、サブプロセスを生成します。

もっとうまくできますか?

答えて

2

bash 4.2には、printfの新しい指定子が導入されました。引数が与えられていなければ、これはbash 4.3に拡張され、現在の時刻を使用しました。 %()Tは、カッコ内に表示されている書式を使用して現在の時刻に展開されます。 LinuxとGNUのbash 4で

$ printf '%(%Y-%m-%d_%H:%M:%S)T\n' 
2016-03-25_12:38:10 
+0

クール。私はhttp://linux.die.net/man/1/bashの代わりに私のマシンの 'man bash'を読んでいたはずです。そしてうまくいけば、 'printf -v date'を使って、日付を変数に追加して使用します。 – Harald

1

#!/bin/bash 

while IFS=: read -r a b; do 
    [[ $a =~ rtc_time ]] && t="${b// /}" 
    [[ $a =~ rtc_date ]] && d="${b// /}" 
done < /proc/driver/rtc 

echo "$d $t" 

出力:

 
2016-03-26 08:03:09 
+0

いいですね:-) – Harald

関連する問題