set -x
デバッグコマンドを使用すると、いくつかの追加行が出力されます。
% set -x
+precmd_update_git_vars:1> [ -n '' ']'
+precmd_update_git_vars:1> [ '!' -n '' ']'
+precmd_update_git_vars:2> update_current_git_vars
+update_current_git_vars:1> unset __CURRENT_GIT_STATUS
+update_current_git_vars:3> [[ python == python ]]
+update_current_git_vars:4> _GIT_STATUS=+update_current_git_vars:4> python /home/ismail/zshfiles/gitstatus.py
+update_current_git_vars:4> _GIT_STATUS=''
+update_current_git_vars:6> __CURRENT_GIT_STATUS=( '' )
+update_current_git_vars:7> GIT_BRANCH=''
+update_current_git_vars:8> GIT_AHEAD=''
+update_current_git_vars:9> GIT_BEHIND=''
+update_current_git_vars:10> GIT_STAGED=''
+update_current_git_vars:11> GIT_CONFLICTS=''
+update_current_git_vars:12> GIT_CHANGED=''
+update_current_git_vars:13> GIT_UNTRACKED=''
+precmd_update_git_vars:3> unset __EXECUTED_GIT_COMMAND
これらの出力により、コマンドをデバッグできません。
なぜset -x
私をデバッグするのですか.zshrc
?私は後でset -x
行をデバッグしたいと思いますset -x
。
答え1
デバッグを試みる場合スクリプトset -x
、端末で使用しないでください(つまり、端末で実行されるシェルのデバッグ)。ソルバーオプションを使用してスクリプトを起動できます-x
(例zsh -x <scriptname> [<args>]
:)。
たとえば、というzshスクリプトがある場合は、ex.zsh
次のようにします。
$ cat /tmp/ex.zsh
#!/bin/zsh
function () {
echo "Hello, world!"
}
$ zsh -x /tmp/ex.zsh
+/tmp/ex.zsh:3> '(anon)'
+(anon):1> echo 'Hello, world!'
Hello, world!
答え2
set -x
シェルで実行すると、「すべて」がデバッグモードになります。ただし、シェル関数とその関数が呼び出すすべてをデバッグする場合は、typeset -ft some_func
この関数を使用してデバッグする関数を表示できます。たとえば、
$ which some_func
some_func() {
echo "hiii"
ls -ls
some_other_func
}
$ typeset -ft some_func
$ some_func
....
<debug output here>
...
これはデバッグ出力の範囲を関心のあるコードに制限します。typeset -f +t some_func
デバッグをオフにするには実行してください。環境に関係なく別のスクリプトをデバッグするには、zsh -x script.sh
誰かが言及したように実行します。
答え3
ここにあります。私は次の行を私の中に入れました。.zshrc
alias debugOn='DEBUGCLI=YES exec zsh'
alias debugOff='DEBUGCLI=NO exec zsh'
if [[ $DEBUGCLI == "YES" ]]
then
export PS1="%F{013}%2~%f%(?.%F{004}.%F{001}✕%?)%# %f"
else
. ~/zshfiles/zsh-git-prompt.zsh
export PS1="%F{013}%2~%f$(git_super_status)%(?.%F{004}.%F{001}✕%?)%# %f"
fi
これで、次のように動作します。
Documents/check:master✔% debugOn
Documents/check% set -xv
Documents/check% echo "Debugging Line"
echo "Debugging Line"
+zsh:3> echo 'Debugging Line'
Debugging Line
Documents/check% set +xv
set +xv
+zsh:4> set +xv
Documents/check% debugOff
Documents/check:master✔%