Caut să capturez rezultatul execuției unui script shell în timp real pentru a o îmbogăți cu informații care oferă data și ora.
Pentru a ilustra, am de exemplu un scenariu de acest tip pe care eu nu trebuie modificate:
#!/bin/bash
pentru i în 2 3 1
do
echo „Se așteaptă $i secunde...”
dormi $i
Terminat
Scriptul produce următorul rezultat:
Așteptați 2 secunde...
Așteptați 3 secunde...
Așteptați 1 secundă...
Încerc să produc rezultatul de tipul:
2021-06-16 11:44:48 [INFO] Se așteaptă 2 secunde...
2021-06-16 11:44:50 [INFO] Se așteaptă 3 secunde...
2021-06-16 11:44:53 [INFO] Se așteaptă 1 secundă...
Folosesc următoarele funcții shell pentru formatare într-un script care rulează scriptul meu inițial:
jurnal de funcții {
echo `data +%Y-%m-%d" "%H:%M:%S`" $@"
if [ "$LOGFILE" != "" ]
atunci
echo `data +%Y-%m-%d" "%H:%M:%S`" $@" >>$LOGFILE
fi
}
function loginf {
log „[INFO] $@”
}
Mă descurc foarte bine cu o buclă while pe o citire pentru a captura rezultatul scriptului meu, dar primesc toate liniile în același timp (sfârșitul execuției sale) și, prin urmare, toate liniile au aceeași dată și oră. Încerc să obțin liniile de fiecare dată când scriptul produce o linie și nu la sfârșitul execuției.