2009-11-10 14 views
5

Tengo un script de shell con muchas sentencias de eco. Quiero prefijar cada línea de salida con la hora/fecha.Prefijo de registros con fecha en el script de shell

Por lo tanto, sustituido cada

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" 

Esto es más bien fea. ¿Hay alguna forma de crear un alias (o el análogo a un #define en C) para hacerlo más limpio?

Obviamente, hacer algo como:

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

... no quiere trabajar, porque en ese caso la fecha sólo se calcula una vez cada eco tendría la misma fecha.

Estoy pensando en reemplazar cada eco con una llamada de función de impresión, que hace el prefijo. Quiero saber si alguien tiene otras/mejores ideas.

Respuesta

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

echodate Some text 1 
echodate Some text 2 
4

Si está utilizando fiesta ...:

#!/bin/bash 

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

myecho "hola" 
+1

mejor usar '$ *' en lugar de '$ @ 'dentro de una cadena más grande (dado que es un contexto donde el comportamiento de' "$ @" 'de dividirse en un arg-por-miembro es indeseable), y es mejor utilizar la sintaxis de la declaración de función POSIX en ausencia de una razón concreta ser incompatible con eso. –

3

Sí, función de shell o por el contrario utilizar 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" 

-

dará como resultado:

abi @ cefix: ~ $ sh test.sh

P. 18. Mär 13:33:35 CET 2011: prueba de

lo que no tiene que cambiar todos sus estados de cuenta de eco.

1

O simplemente almacenar el formato:

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

No se necesita tanto citar, por cierto.

-1

Si está utilizando KornShell (ksh) aquí es una función:

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

Ejemplo de invocación de la función anterior:

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