Ho uno script che misura per quanto tempo viene eseguito un comando.
Ha bisogno del time
comando "reale" , vale a dire un binario per esempio in /usr/bin/time
(poiché il built-in bash non ha il -f
flag).
Di seguito, uno script semplificato che può essere eseguito il debug:
#!/bin/bash
TIMESEC=$(echo blah | ( /usr/bin/time -f %e grep blah >/dev/null ) 2>&1 | awk -F. '{print $1}')
echo ABC--$TIMESEC--DEF
if [ "$TIMESEC" -eq 0 ] ; then
echo "we are here!"
fi
Salva come "test.sh" ed esegui:
$ bash test.sh
ABC--0--DEF
we are here!
Quindi ha funzionato.
Ora proviamo a eseguire il debug aggiungendo "-x" alla riga di comando bash:
$ bash -x test.sh
++ echo blah
++ awk -F. '{print $1}'
+ TIMESEC='++ /usr/bin/time -f %e grep blah
0'
+ echo ABC--++ /usr/bin/time -f %e grep blah 0--DEF
ABC--++ /usr/bin/time -f %e grep blah 0--DEF
+ '[' '++ /usr/bin/time -f %e grep blah
0' -eq 0 ']'
test.sh: line 10: [: ++ /usr/bin/time -f %e grep blah
0: integer expression expected
Perché questo script si interrompe quando stiamo usando "-x" e funziona bene senza di essa?
BASH_XTRACEFD
consente di reindirizzare l' set -x
output da qualche parte è meno problematico.
-x
on il$()
costrutto stia-x
includendo l' output come parte del valore risultante. Non so se si tratta di un comportamento "previsto" o di un bug ... O forse è la subshell()
all'interno che sta effettivamente dando l'-x
output.