Domanda

Ho uno script di shell con un sacco di dichiarazioni di eco. Voglio prefisso ogni riga di output con l'ora / data.

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"

Questa è piuttosto brutto. Esiste un modo per creare un alias (o l'analogo ad 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 avrebbe funzionato, 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 di. Vorrei sapere se qualcuno ha altre idee / migliori.

È stato utile?

Soluzione

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

echodate Some text 1
echodate Some text 2

Altri suggerimenti

Se si utilizza bash ...:

#!/bin/bash

function myecho() {
        echo "`date +%y/%m/%d_%H:%M:%S`:: $@"
}

myecho "hola"

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

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

echo "test"

-

si tradurrà in:

abi @ cefix: ~ $ sh test.sh

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

in modo da non dover cambiare tutte le istruzioni echo.

O semplicemente memorizzare il formato:

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

Non tanto comportante è necessario, btw.

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"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top