在shell脚本中使用日期前缀日志

时间:2009-11-10 05:09:31

标签: shell date echo

我有一个带有很多echo语句的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"

...不起作用,因为在这种情况下,DATE只计算一次,每个回波的日期都相同。

我正在考虑用打印函数调用替换每个echo,它使用前缀。我想知道是否有人有任何其他/更好的想法。

6 个答案:

答案 0 :(得分:12)

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

echodate Some text 1
echodate Some text 2

答案 1 :(得分:4)

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

#!/bin/bash

function myecho() {
        echo "`date +%y/%m/%d_%H:%M:%S`:: $@"
}

myecho "hola"

答案 2 :(得分:3)

是的,shell函数或反过来使用别名:

alias now="date +%s" # or your specific date format
echo "`now` some text"

答案 3 :(得分:3)

#!/bin/bash
echo() {
    printf "`date`: $1\n"
}

echo "test"

-

将导致:

abi @ cefix:〜$ sh test.sh

Fr18.Mär13:33:35 CET 2011:test

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

答案 4 :(得分:1)

或者只存储格式:

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

不需要引用,顺便说一句。

答案 5 :(得分:-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"