在Bash中,我怎么能懒惰评估'约会'?

时间:2011-10-17 14:03:59

标签: bash

我有一个用时间戳输出的脚本,但我无法在达到特定行时设置日期评估;所有邮票都有脚本第一次调用的时间,即它们都是一样的,即使脚本需要几个小时才能完成。

我正在尝试这个:

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

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

我做错了什么?

4 个答案:

答案 0 :(得分:7)

问题是,当你分配给DATE_COMMAND时,反引号会评估里面的命令。你可以改为:

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

说实话,我会avoid eval并且只是让它成为一个功能:

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

答案 1 :(得分:3)

别名在回声线中很方便,易于扩展。 E.g:

#!/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

答案 2 :(得分:1)

您需要在每个TIMESTAMP执行之前将eval变量重新分配给当前日期/时间,否则将重新显示原始时间戳值。例如:

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

答案 3 :(得分:1)

为什么不写一个函数来执行此操作?

$ function printdate {
>     echo `date +"%H:%M:%S --"`
> }