我有一个带有很多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,它使用前缀。我想知道是否有人有任何其他/更好的想法。
答案 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"