"bash -x"(디버그 모드)가 소스 스크립트로 반복되도록 하려면 어떻게 해야 합니까?

"bash -x"(디버그 모드)가 소스 스크립트로 반복되도록 하려면 어떻게 해야 합니까?

Linux의 로그인 초기화에서 bash가 수행하는 작업을 디버깅하려고 합니다. "bash -x"를 사용하면 bash가 수행 중인 작업을 인쇄하지만 "set -x"와 같은 소스 파일의 명령은 인쇄하지 않는다는 내용을 읽었습니다. 호출하기 전에 초기화가 실행되므로 "set -x"를 사용할 수 없습니다. "bash -x"는 OS X에서 잘 반복되는 것처럼 보이지만 이는 bash 버전 때문일 수 있습니다.

리눅스: 3.2.25

OS X: 3.2.48

다음은 Linux에서 반복되지 않는 동작을 발췌한 것입니다.

bash -l -x -c 'echo 1'
# ... snip ...
+ for i in '/etc/profile.d/*.sh'
+ '[' -r /etc/profile.d/vim.sh ']'
+ '[' '' ']'
+ . /etc/profile.d/vim.sh
+ for i in '/etc/profile.d/*.sh'
+ '[' -r /etc/profile.d/which-2.sh ']'
+ '[' '' ']'
+ . /etc/profile.d/which-2.sh
# ... snip ...

/etc/profile.d/vim.sh가 어떻게 소스로 제공되지만 해당 명령이 인쇄되지 않는지 확인하세요. 업그레이드하지 않고 해결 방법이 있나요? 버전 차이로 인한 걸까요?

답변1

set -x루트 파일(다른 모든 파일이 필요한 파일)의 어딘가가 작동해야 합니다. 또는 [[ !-z "$DEBUG" ]] && set -x각 파일에 다음과 같은 내용을 입력 하고 DEBUG=1 script.sh.

답변2

스크립트를 소싱하고 실행하지 않으므로 기본 스크립트의 첫 번째 명령은 "set -x"여야 합니다.

이제 모든 소스 스크립트가 디버그 모드에서 실행됩니다. 스크립트를 소스로 사용하면 현재 쉘에서 실행되므로 -x를 한 번 설정하면 모든 소스 스크립트에 적합합니다.

관련 정보