2009-11-10 16 views
5

J'ai un script shell avec beaucoup d'instructions d'écho. Je veux préfixer chaque ligne de sortie avec l'heure/la date.Préfixer les journaux avec la date dans le script shell

Alors, je l'ai remplacé tous les

echo "Some text1" 
echo "Some text2" 

avec

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

Ce qui est assez laid. Y at-il de toute façon de créer un alias (ou l'analogue d'un #define en C), pour le rendre plus propre.

De toute évidence, faire quelque chose comme:

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

... ne fonctionnerait pas, parce que dans ce cas, la date est calculée uniquement une fois et chaque écho aurait la même date.

Je pense à remplacer tous les échos d'un appel de fonction d'impression, qui fait le préfixage. Je veux savoir si quelqu'un a d'autres/meilleures idées.

Répondre

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

echodate Some text 1 
echodate Some text 2 
4

Si vous utilisez bash ...:

#!/bin/bash 

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

myecho "hola" 
+1

Il vaut mieux utiliser '$ *' plutôt que '$ @ 'à l'intérieur d'une chaîne plus grande (puisque c'est un contexte où le comportement de" $ @ "' de division en un argument par membre est activement indésirable), et mieux d'utiliser la syntaxe de déclaration de la fonction POSIX sans raison concrète être incompatible avec cela. –

3

Oui, la fonction shell ou à l'inverse utiliser 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" 

-

se traduira par:

abi @ cefix: ~ $ sh test.sh

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

si vous n'avez pas de changer toutes vos déclarations d'écho.

1

Ou tout simplement stocker le format:

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

Pas tellement de citer est nécessaire, d'ailleurs.

-1

Si vous utilisez KornShell (ksh) ici est une fonction:

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

Exemple d'appel de la fonction ci-dessus:

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