Shell-Script

set -x 調試我的 .zshrc

  • July 6, 2020

當我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.

如果您正在嘗試調試腳本,請不要set -x在終端上使用(即調試在終端中執行的 shell)。-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!

在這裡。我把以下幾行放在我的.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✔% 

引用自:https://unix.stackexchange.com/questions/596715