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.

¿Fue útil?

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"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top