2011-10-17 16 views
2

私はタイムスタンプを出力するスクリプトを持っていますが、特定の行に達したときに日付を評価することはできません。すべてのスタンプはスクリプトの最初の呼び出しの時間を持っています。つまり、スクリプトの完了に数時間かかりますが、すべて同じです。Bashでは、どうすればeval 'date'を遅延させることができますか?

私はこれをしようとしている:私は間違って

TIMESTAMP=`date +"%H:%M:%S --"` 
... 

eval "echo $TIMESTAMP Starting backup" 
... 
eval "echo $TIMESTAMP Doing something here" 

何をしているのですか?

+0

を私はタイムスタンプが、私はそれのための機能を使用していない理由である文字列のほんの一部であることを示すために例を更新しました。 – eatloaf

答えて

2

エイリアスはエイリアスで簡単に拡張できます。例えば:

降伏
#!/bin/bash 

alias now='date +%T' 
echo $(now) 
sleep 10 
echo `now` 
sleep 1 
echo $(now) My Log line 

15:13:56 
15:14:06 
15:14:07 My Log line 
+1

これは、タイムスタンプ後に簡単にテキストを追加できる唯一の回答です。 'echo $(TIMESTAMP)Starting ... ' yield: ' 19:20:08 - Starting ... ' – eatloaf

6

DATE_COMMANDに割り当てると、バックティックがコマンドを内部で評価するという問題があります。あなたが代わりに次の操作を行うことができます。各evalはに実行される前に、TIMESTAMP変数を再割り当てする必要が

timestamp() { 
    date +"%H:%M:%S --" 
} 
... 
... 
timestamp 
... 
... 
timestamp 
+0

+1は邪悪な 'eval'を避けるためです。 – l0b0

0

DATE_COMMAND='date +"%H:%M:%S --"' 
... 
... 
eval $DATE_COMMAND 
... 
... 
eval $DATE_COMMAND 

は正直に言うと、しかし、私はavoid evalだけがこの機能になるだろう現在の日付/時刻です。そうしないと、元のタイムスタンプ値が再表示されます。例:

TIMESTAMP=`date +"%H:%M:%S --"` 
eval "echo $TIMESTAMP" 
... 
TIMESTAMP=`date +"%H:%M:%S --"` 
eval "echo $TIMESTAMP" 
0

これを行う関数を作成しないのはなぜですか。

関連する問題