2009-11-10 92 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" 
更好