J'écris souvent des scripts shell KSH qui suivent le même modèle:
- (1) récupérer la sortie d'une ou plusieurs commandes
- (2) formatez-le en utilisant grep | cut | awk | sed et imprimez-le à l'écran ou dans un fichier
Pour ce faire, je stocke souvent la sortie de (1) dans un fichier temporaire, puis je fais le formatage en (2) sur ce fichier.
Prenez ce code par exemple:
TMPFILE=file.tmp
# If tmpfile exists rm it.
[ -f $TMPFILE ] && rm -f $TMPFILE
for SERVICE in $(myfunc); do
getInfo $SERVICE > $TMPFILE # Store raw output in the TMPFILE
# I retrieve the relevant data from the TMPFILE
SERV_NAME=$(head -1 $TMPFILE | sed -e 's/ $//')
SERV_HOSTNAME=$(grep HOSTNAME $TMPFILE | cut -d "=" -f2)
SERV_ARGS=$(grep Arguments $TMPFILE | cut -d ":" -f2)
print $SERV_NAME $SEP $SERV_HOSTNAME $SEP $SERV_ARGS
rm -f $TMPFILE #rm the TMPFILE in vue of next iteration
done
Existe-t-il un moyen, en utilisant des canaux, des redirections et autres joyeusetés, d'éviter d'écrire un fichier sur le disque à chaque fois?
Si cela aide, j'utilise la version ksh M-11/16 / 88i
PATH
ou d'autres variables shell ou d'environnement.TMPFILE
peut être bien, maisTMPDIR
c'est spécial, alors voulez-vous vraiment marcher sur la corde raide?