Registros de prefijo con fecha en el script de shell
Pregunta
Tengo un script de shell con muchas declaraciones de eco. Quiero prefijar cada línea de salida con la hora/fecha.
Entonces, reemplacé 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 bastante feo. ¿Hay de todos modos para crear un alias (o el análogo a un #define en c), para hacerlo más limpio?
Obviamente, haciendo algo como:
DATE=`date +%y/%m/%d_%H:%M:%S`
echo "$DATE:: some text1"
echo "$DATE:: some text2"
... no funcionaría, porque en ese caso la fecha solo se calcula una vez y 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 alguna otra/mejor ideas.
Solución
echodate()
{
echo `date +%y/%m/%d_%H:%M:%S`:: $*
}
echodate Some text 1
echodate Some text 2
Otros consejos
Si estás usando Bash ...:
#!/bin/bash
function myecho() {
echo "`date +%y/%m/%d_%H:%M:%S`:: $@"
}
myecho "hola"
Sí, la función de shell o, por el contrario, use un alias:
alias now="date +%s" # or your specific date format
echo "`now` some text"
#!/bin/bash
echo() {
printf "`date`: $1\n"
}
echo "test"
--
resultará en:
abi@cefix: ~ $ sh test.sh
FR 18. Mär 13:33:35 CET 2011: Prueba
Entonces no tiene que cambiar todas sus declaraciones de eco.
O simplemente almacene el formato:
format="+%y/%m/%d_%H:%M:%S::"
echo $(date $format) some text
No se necesitan tantas cotizaciones, por cierto.
Si está utilizando Kornshell (KSH) aquí hay 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 llamar a la función anterior:
log "Starting foo script." "${PWD}/logs/foo.log"