次のコマンドは有効です
% DEBUGCLI=YES exec zsh
% set -xv
% echo debug
echo debug
+zsh:2> echo debug
debug
しかし、私が次のようなことをしようとすると
% exec zsh -c 'set -xv'
端末を閉じます。
私はそれを使用したくありませんexec zsh -xv
。なぜならここ。
2つではなく1つのコマンドを探して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
)。