%EA%B0%80%20%EC%86%8C%EC%8A%A4%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A1%9C%20%EB%B0%98%EB%B3%B5%EB%90%98%EB%8F%84%EB%A1%9D%20%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
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를 한 번 설정하면 모든 소스 스크립트에 적합합니다.