다음 명령은 유효합니다
% 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'
zsh
run 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
.zsh
DEBUGCLI=YES
당신이 링크한 답변하고 싶은 일을 제안한 후 다음을 추가할 수 있습니다.
if [[ $DEBUGCLI = YES ]]; then
set -o xtrace -o verbose
fi
( ~/.zshrc
또는 나머지 부분을 추적하고 기록하지 않으려면 마지막 줄).~/.zshrc
어쨌든 매번 셸을 다시 시작할 필요 없이 set -xv
and set +xv
(또는 set -o xtrace -o verbose
and )를 실행하여 디버깅을 켜거나 끌 수 있습니다.set +o xtrace +o verbose
후크 또는 zle 위젯에서 명령을 실행하는 대신 입력한 코드를 실행하는 동안에만 적용되도록 하려면 xtrace
후크 끝에서 설정하고 후크 preexec()
시작 부분에서 설정을 해제 하면 됩니다 precmd()
( 그리고 set +x 2> /dev/null
).