我有一个用时间戳输出的脚本,但我无法在达到特定行时设置日期评估;所有邮票都有脚本第一次调用的时间,即它们都是一样的,即使脚本需要几个小时才能完成。
我正在尝试这个:
TIMESTAMP=`date +"%H:%M:%S --"`
...
eval "echo $TIMESTAMP Starting backup"
...
eval "echo $TIMESTAMP Doing something here"
我做错了什么?
答案 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 --"`
> }