J'ai un script qui mesure la durée d'exécution d'une commande.
Il a besoin de la "vraie" timecommande, ce qui signifie, un binaire par exemple dans /usr/bin/time(car le bash-built-in n'a pas le -fdrapeau).
Ci-dessous, un script simplifié qui peut être débogué:
#!/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!"
fiEnregistrez sous "test.sh" et exécutez:
$ bash test.sh
ABC--0--DEF
we are here!Donc ça a marché.
Maintenant, essayons de déboguer ceci en ajoutant "-x" à la ligne de commande 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 expectedPourquoi ce script se casse-t-il lorsque nous utilisons "-x" et fonctionne correctement sans lui?
BASH_XTRACEFDvous permet de rediriger la set -xsortie vers un endroit où cela pose moins de problèmes.
                
-xon, la$()construction obtient la-xsortie incluse dans le cadre de sa valeur résultante. Je ne sais pas si c'est un comportement "attendu" ou un bogue ... Ou peut-être que c'est le sous-shell à l'()intérieur qui donne la-xsortie.