2009-11-10 55 views
5

我有一个包含大量echo语句的shell脚本。我想在输出的每一行前加上时间/日期。在shell脚本中使用日期预定日志

所以,我更换一次

echo "Some text1" 
echo "Some text2" 

echo "`date +%y/%m/%d_%H:%M:%S`:: some text1" 
echo "`date +%y/%m/%d_%H:%M:%S`:: some text2" 

这是相当丑陋。无论如何要创建一个别名(或类似于C中的#define),使其更清洁。

显然,做这样的事情:

DATE=`date +%y/%m/%d_%H:%M:%S` 
echo "$DATE:: some text1" 
echo "$DATE:: some text2" 

...是行不通的,因为在这种情况下,日期仅计算一次,每个回波将具有相同的日期。

我正在考虑用打印函数调用来替换每个回显,而不是前缀。我想知道是否有人有其他更好的想法。

回答

12
echodate() 
{ 
    echo `date +%y/%m/%d_%H:%M:%S`:: $* 
} 

echodate Some text 1 
echodate Some text 2 
4

如果你正在使用bash ...:

#!/bin/bash 

function myecho() { 
     echo "`date +%y/%m/%d_%H:%M:%S`:: [email protected]" 
} 

myecho "hola" 
+1

使用'$ *'而不是'$在一个更大的字符串中(因为它是一个上下文,其中“$ @”的分割为每个成员的arg的行为是不可取的),并且更好地使用缺少具体原因的POSIX函数声明语法与其不相容。 – 2014-02-18 16:04:16

3

是,壳功能或相反使用别名:

alias now="date +%s" # or your specific date format 
echo "`now` some text" 
3
#!/bin/bash 
echo() { 
    printf "`date`: $1\n" 
} 

echo "test" 

-

将导致:

ABI @ cefix:〜$ SH test.sh

星期五18月13时33分35秒CET 2011:测试

所以你不必改变所有的echo语句。

1

或者只是存储格式:

format="+%y/%m/%d_%H:%M:%S::" 
echo $(date $format) some text 

不是需要这么多的报价,顺便说一句。

-1

如果您正在使用KornShell(KSH)这里是一个函数:

#** Description: Logs stringToLog to scriptLog using a standard date format. 
#** Parameters: ${1} stringToLog (Required) 
#**    ${2} scriptLog (Required) 
log() { 
     echo "[`date +'%Y/%m/%d %H:%M:%S%s'`]: ${1}" >> "${2}" 
} 

调用上述函数的例子:

log "Starting foo script." "${PWD}/logs/foo.log" 
更好