최근 동료가 내 bash 스크립트를 디버깅하지 않고 디버깅 할 수있는 bash -x
를 소개했습니다. echo $foo
경로.
$ bash -x hello-world.sh + echo "Hello World" Hello World
내부적으로-bash는이를 어떻게 수행합니까? man bash
를 확인했는데 인터프리터를 호출 할 때 -x
플래그를 언급했습니다. -x
환경 또는 기타 문제에서 디버깅 될 항목과 디버깅되지 않을 항목에 대한 개요입니다.
답변
-x
는 -o
으로 xtrace
를 설정하는 것과 동일합니다. div> 옵션을 bash로. bash 맨 페이지 사본에서 :
각 간단한 명령 을 확장 한 후 for 명령, case 명령, select 명령 또는 산술 for 명령, PS4 의 확장 된 값을 표시 한 다음 명령과 확장 된 인수를 표시합니다. ts 또는 관련 단어 목록.
나는 이것에 대해 많은 “고장난”이 있다고 생각하지 않습니다. 실행하는 각 명령을 인쇄합니다. 쉘 스크립트에서 “stderr
출력을 구문 분석하는 경우 명령이 stderr
에 인쇄되기 때문에 이것이 엉망이 될 수 있습니다. (일명 파일 설명자 2), 극단적 인 경우처럼 보입니다.
(조건부로 스크립트 내부 또는 대화 형 쉘 세션에서 set -x
를 사용하여 활성화 할 수 있습니다. 다시 켜려면 set +x
를 사용하세요.)
댓글
가 표시됩니다.
set help
가-x Print commands and their arguments as they are executed.
라고만 말합니다. ' unset 현재 셸에서.set help
위치 매개 변수를 단어help
및 ' 아무것도 출력하지 않습니다.help set
는및 t 목록 끝에
Using + rather than - causes these flags to be turned off.