2009-11-10 19 views
5

Ho uno script di shell con molte istruzioni di eco. Voglio prefisso ogni riga di output con l'ora/la data.Registrazione di prefissi con la data nello script di shell

Così, ho sostituito ogni

echo "Some text1" 
echo "Some text2" 

con

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

Questo è piuttosto brutto. Esiste comunque la possibilità di creare un alias (o l'analogo di un #define in C), per renderlo più pulito.

Ovviamente, facendo qualcosa di simile:

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

... non funzionerebbe, perché in tal caso la data è calcolato una sola volta e ogni eco avrebbe la stessa data.

Sto pensando di sostituire ogni eco con una chiamata di funzione di stampa, che fa il prefisso. Voglio sapere se qualcuno ha altre/migliori idee.

risposta

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

echodate Some text 1 
echodate Some text 2 
4

se si sta usando bash ...:

#!/bin/bash 

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

myecho "hola" 
+1

meglio usare '$ *' piuttosto che '$ @ 'all'interno di una stringa più grande (poiché si tratta di un contesto in cui il comportamento di" $ @ "' di dividere in un arg-per-member è attivamente indesiderabile), e meglio usare la sintassi della dichiarazione di funzione POSIX in assenza di un motivo concreto essere incompatibile con esso. –

3

Sì, funzione di shell o al contrario utilizzare un alias:

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

echo "test" 

-

risulterà in:

abi @ cefix: ~ $ sh test.sh

Fr 18. Mär 13:33:35 CET 2011: prova

in modo da non dover cambiare tutte le sue dichiarazioni di eco.

1

O semplicemente memorizzare il formato:

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

non è necessario così tanto citando, btw.

-1

Se si utilizza KornShell (ksh) qui è una funzione:

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

Esempio di chiamare la funzione di cui sopra:

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