2009-11-10 3 views
5

Ich habe ein Shell-Skript mit vielen Echo-Anweisungen. Ich möchte jeder Ausgabezeile die Uhrzeit/das Datum voranstellen.Protokolle mit Datum in Shell-Skript vorfixieren

So ersetzte ich jeden

echo "Some text1" 
echo "Some text2" 

mit

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

Das ist ziemlich hässlich. Gibt es sowieso einen Alias ​​(oder das Analog zu einem #define in C), um es sauberer zu machen.

Offensichtlich tut so etwas wie:

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

... nicht funktionieren würde, weil in diesem Fall das Datum nur einmal berechnet wird und jedes Echo würde das gleiche Datum hat.

Ich denke darüber nach, jedes Echo durch einen Druckfunktionsaufruf zu ersetzen, der das Präfix ausführt. Ich möchte wissen, ob jemand andere/bessere Ideen hat.

Antwort

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

echodate Some text 1 
echodate Some text 2 
4

Wenn Sie bash verwenden ...:

#!/bin/bash 

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

myecho "hola" 
+1

besser zu nutzen '$ *' statt '$ @ 'innerhalb eines größeren Strings (da es sich um einen Kontext handelt, in dem' '$ @'s Verhalten bei der Aufteilung auf ein Arg-per-Mitglied aktiv unerwünscht ist), und besser die POSIX-Funktionsdeklarationssyntax ohne einen konkreten Grund zu verwenden damit unvereinbar zu sein. –

3

Ja, Shell-Funktion oder umgekehrt einen Aliasnamen verwenden:

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

echo "test" 

-

wird ergeben:

abi @ cefix: ~ $ sh test.sh

Fr 18. Mär 13.33.35 CET 2011: Test

so dass Sie nicht alle Ihre Echo-Anweisungen ändern.

1

Oder speichert nur das Format:

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

Nicht so sehr unter Angabe benötigt wird, btw.

-1

Wenn Sie hier Kornshell (KSH) verwenden, ist eine Funktion:

#** 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}" 
} 

Beispiel für die obige Funktion aufrufen:

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