Scrivo spesso script di shell KSH che seguono lo stesso schema:
- (1) recupera l'output da uno o più comandi
- (2) formattalo usando grep | cut | awk | sed e stampalo sullo schermo o su un file
Per fare ciò, spesso memorizzo l'output di (1) in un file temporaneo, quindi eseguo la formattazione in (2) su quel file.
Prendi quel codice per esempio:
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
C'è un modo, usando pipe, reindirizzamenti e quant'altro, per evitare di scrivere un file su disco ogni volta?
Se aiuta, sto usando la versione ksh M-11/16 / 88i
PATH
o altre variabili della shell o dell'ambiente.TMPFILE
può andare bene, maTMPDIR
è speciale, quindi vuoi davvero camminare sul filo del rasoio?