새 쉘을 호출한 후 `set -xv`를 실행하십시오.

새 쉘을 호출한 후 `set -xv`를 실행하십시오.

다음 명령은 유효합니다

% DEBUGCLI=YES exec zsh             
% set -xv 
% echo debug
echo debug
+zsh:2> echo debug
debug

그러나 내가 다음과 같은 것을 시도하면

% exec zsh -c 'set -xv'

터미널을 닫으면 됩니다.

나는 그것을 사용하고 싶지 않습니다 exec zsh -xv. 왜냐하면여기.

두 개가 아닌 하나의 명령을 찾고 set -xv있으므로 exec zsh.

응 나도 노력했어

exec zsh ; set -xv& exec zsh && set -xv.두 명령 모두에서 무시됩니다 set -xv.

답변1

zsh -c 'set -xv'zshrun include 를 지시합니다 set -xv. 실행 후 set -xv스크립트가 완료되고 zsh종료됩니다(종료 코드는 set). zsh -c uname달리고 마무리하는 것과 같습니다 uname.

exec zsh ; set -xv현재 프로세스 내에서 실행하도록 현재 셸에 지시합니다. 따라서 셸이 더 이상 명령을 실행하지 않기 zsh때문에 뒤따르는 모든 명령은 절대 실행되지 않습니다(어쨌든 반환 후에만 실행될 수 있음 ).exec

및 옵션을 사용하여 대화형 쉘을 실행하려면 다음을 수행하십시오 zsh.-v-x

zsh -xv

또는

zsh -o verbose -o xtrace

귀하의 환경에서 대화식으로 실행하려는 경우 set -xv.zshDEBUGCLI=YES당신이 링크한 답변하고 싶은 일을 제안한 후 다음을 추가할 수 있습니다.

if [[ $DEBUGCLI = YES ]]; then
  set -o xtrace -o verbose
fi

( ~/.zshrc또는 나머지 부분을 추적하고 기록하지 않으려면 마지막 줄).~/.zshrc

어쨌든 매번 셸을 다시 시작할 필요 없이 set -xvand set +xv(또는 set -o xtrace -o verboseand )를 실행하여 디버깅을 켜거나 끌 수 있습니다.set +o xtrace +o verbose

후크 또는 zle 위젯에서 명령을 실행하는 대신 입력한 코드를 실행하는 동안에만 적용되도록 하려면 xtrace후크 끝에서 설정하고 후크 preexec()시작 부분에서 설정을 해제 하면 됩니다 precmd()( 그리고 set +x 2> /dev/null).

관련 정보