echo $?
내 zsh 터미널은 is 와 같은 오류 코드로 시작됩니다 1
. 이것은 실제로 아무런 문제를 일으키지 않지만 단지 나를 짜증나게 할 뿐입니다. 다양한 시작 스크립트의 명령이 포함될 것이라고 생각했지만 history
, 그렇지 않고 history
사용자가 입력한 명령만 표시됩니다.
이 상황을 디버깅하는 좋은 방법은 무엇입니까?
답변1
시작 스크립트나 다른 셸 스크립트의 기능을 이해하려면 set -x
알고 싶은 부분의 시작 부분이나 앞에 배치하세요. 이로 인해 쉘은 실행되는 모든 명령을 추적하고 각 명령을 실행하기 전에 표준 오류로 인쇄합니다. 추적을 끄려면(스크립트의 일부만 추적하려는 경우(아마도 유용하지 않음)) 를 실행하십시오 set -x
.
를 실행하여 추적 모드에서 zsh를 시작할 수도 있습니다 zsh -x
. (예를 들어 환경 변수를 설정하기 전에 의존하는 경우와 같이 터미널 에뮬레이터에서 zsh를 직접 실행할 때만 문제가 발생하는 경우 특정 사례에서 문제가 재현되지 않을 수 있습니다.)
set -x
표준 오류에 대한 추적을 인쇄합니다. 를 실행하여 파일로 리디렉션하거나 zsh -x 2>zsh.log
임시로 사용할 수 있습니다.
exec 2>zsh.log; set -x
… # stuff you want to trace
set +x; exec 2>/dev/tty
이로 인해 터미널이 아닌 표준 오류가 발생하여 일부 플러그인이 중단될 수 있습니다. 그렇다면 script -c 'zsh -x'
대신 실행하십시오. 그러면 모든 내용이 zsh라는 파일에 기록되지만 typescript
여전히 터미널에 연결됩니다.
파일의 마지막 줄에 true(아무 작업도 성공적으로 수행하지 않는 프로그램)를 사용하십시오. – 월트너
@waltinator 좋은 생각이지만 작동하지 않습니다.
return
아마도 함수 밖의 박차가 아닐까요?