Bazı komutun ne kadar çalıştığını ölçen bir komut dosyası var.
"Gerçek" timekomutuna, yani bir ikili /usr/bin/timedosyaya (bash-built-in -fbayrağı olmadığı için ) ihtiyaç duyar .
Aşağıda, hata ayıklanabilecek basitleştirilmiş bir komut dosyası:
#!/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
"Test.sh" olarak kaydedin ve yürütün:
$ bash test.sh
ABC--0--DEF
we are here!
Böylece işe yaradı.
Şimdi bash komut satırına "-x" ekleyerek hata ayıklamaya çalışalım:
$ 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
"-X" kullandığımızda bu komut dosyası neden bozuluyor ve onsuz düzgün çalışıyor?
BASH_XTRACEFDyönlendirmenizi sağlar set -x.
-xediyor gibi görünüyor . Bunun "beklenen" bir davranış mı yoksa bir hata mı olduğunu bilmiyorum ... Ya da belki aslında çıktı veren iç kabuk olduğunu .$()-x()-x