내 쉘 스크립트의 소스는 무엇입니까?

내 쉘 스크립트의 소스는 무엇입니까?

내 홈 디렉토리에 a 및 a가 있습니다 .zshrc. .zshenv내 명령에 새 명령을 추가했는데 .zshenv해당 명령이 3번 이상 실행되는 것을 발견했습니다. 실수 source로 삭제했다는 사실을 깨닫고 .zshrc해당 줄을 삭제했지만 여전히 두 번 실행되었습니다.

나는 스크립트에 합계를 반영하려고 시도했고 $0첫 번째 패스와 두 번째 패스를 얻었습니다. 그게 무슨 뜻이야? 호출자를 보여주는 "스택 추적"을 얻는 더 좋은 방법이 있습니까?$_(~/.zshenv) (~/.zshenv)(30) (zsh)

답변1

전화할 때 zsh스위치를 사용하여 현재 상황을 디버깅할 수 있습니다 -x. 결과와 함께 실행된 각 행을 표시한다는 점에서 스위치 bash와 유사합니다 .-x

$ zsh -x
    ...
+/etc/profile.d/mc.sh:3> alias 'mc=. /usr/libexec/mc/mc-wrapper.sh'
+_src_etc_profile_d:9> i=/etc/profile.d/PackageKit.sh
+_src_etc_profile_d:10> [ -r /etc/profile.d/PackageKit.sh ']'
+_src_etc_profile_d:11> . /etc/profile.d/PackageKit.sh
+_src_etc_profile_d:9> i=/etc/profile.d/qt.sh
+_src_etc_profile_d:10> [ -r /etc/profile.d/qt.sh ']'
+_src_etc_profile_d:11> . /etc/profile.d/qt.sh
+/etc/profile.d/qt.sh:9> [ -z /usr/lib64/qt-3.3 ']'
+_src_etc_profile_d:9> i=/etc/profile.d/udisks-bash-completion.sh
+_src_etc_profile_d:10> [ -r /etc/profile.d/udisks-bash-completion.sh ']'
+_src_etc_profile_d:11> . /etc/profile.d/udisks-bash-completion.sh
+/etc/profile.d/udisks-bash-completion.sh:3> [ -z '' ']'
+/etc/profile.d/udisks-bash-completion.sh:3> return
+_src_etc_profile_d:9> i=/etc/profile.d/vim.sh
+_src_etc_profile_d:10> [ -r /etc/profile.d/vim.sh ']'
+_src_etc_profile_d:11> . /etc/profile.d/vim.sh
+/etc/profile.d/vim.sh:1> [ -n '' -o -n '' -o -n 4.3.10 ']'
...

나중에 볼 수 있도록 출력을 파일로 리디렉션할 수도 있습니다.

$ zsh -x 2>&1 | tee zsh.log

마지막에 중단될 것 같습니다. Ctrl+를 c중지하고 결과 로그 파일을 살펴보세요 zsh.log.

답변2

변경 사항을 적용하셨나요 source ~/.zshrc? 또는 변경 사항을 적용하려면 로그아웃했다가 다시 로그인하세요.

관련 정보