9

我有一个带有很多 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 只计算一次,并且每个回声都具有相同的日期。

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

4

6 回答 6

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

echodate Some text 1
echodate Some text 2
于 2009-11-10T05:13:37.527 回答
4

如果您使用的是 bash ...:

#!/bin/bash

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

myecho "hola"
于 2009-11-10T05:19:32.783 回答
3

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

alias now="date +%s" # or your specific date format
echo "`now` some text"
于 2009-11-10T05:20:35.963 回答
3
#!/bin/bash
echo() {
    printf "`date`: $1\n"
}

echo "test"

--

将导致:

abi@cefix:~$ sh test.sh

Fr 18. Mar 13:33:35 CET 2011:测试

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

于 2011-03-18T12:31:08.210 回答
1

或者只是存储格式:

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

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

于 2011-04-14T02:44:58.100 回答
-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"
于 2014-02-18T15:57:08.010 回答