일부 명령이 실행되는 시간을 측정하는 스크립트가 있습니다.
"실제" time
명령 이 필요합니다. 예를 들어 /usr/bin/time
bash-built-in에는 -f
플래그 가 없기 때문에 바이너리입니다 .
아래는 디버깅 할 수있는 단순화 된 스크립트입니다.
#!/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"로 저장하고 다음을 실행하십시오.
$ bash test.sh
ABC--0--DEF
we are here!
그래서 효과가있었습니다.
이제 bash 명령 행에 "-x"를 추가하여 이것을 디버깅 해 보자 :
$ 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"를 사용할 때이 스크립트가 중단되는 이유는 무엇입니까?
BASH_XTRACEFD
하면 set -x
문제가 덜 발생하는 곳으로 출력을 리디렉션 할 수 있습니다 .
-x
on 과 같이$()
구성이-x
결과 값의 일부로 출력을 포함 시키는 것으로 보입니다 . "예상 된"동작인지 버그인지 모르지만 ...()
실제로-x
출력을 제공하는 서브 쉘일 수도 있습니다 .