我的 shell 脚本的来源是什么?

我的 shell 脚本的来源是什么?

我的主目录中有 a.zshrc和 a 。.zshenv我向我的命令添加了一个新命令.zshenv,我发现该命令至少运行了 3 次。我意识到我不小心source从 中删除了它.zshrc,所以我删除了该行,但它仍然运行了两次。

我尝试在脚本中回显$0和,我得到了第一遍和第二遍。这意味着什么?有没有更好的方法来获取显示调用者的“堆栈跟踪”?$_(~/.zshenv) (~/.zshenv)(30) (zsh)

答案1

当您调用时,zsh您可以使用开关调试正在发生的情况-x。它类似于bash-xswitch,它显示执行时的每一行以及任何结果。

$ zsh -x
    ...
+/etc/profile.d/mc.sh:3> alias 'mc=. /usr/libexec/mc/mc-wrapper.sh'
+_src_etc_profile_d:9> i=/etc/profile.d/PackageKit.sh
+_src_etc_profile_d:10> [ -r /etc/profile.d/PackageKit.sh ']'
+_src_etc_profile_d:11> . /etc/profile.d/PackageKit.sh
+_src_etc_profile_d:9> i=/etc/profile.d/qt.sh
+_src_etc_profile_d:10> [ -r /etc/profile.d/qt.sh ']'
+_src_etc_profile_d:11> . /etc/profile.d/qt.sh
+/etc/profile.d/qt.sh:9> [ -z /usr/lib64/qt-3.3 ']'
+_src_etc_profile_d:9> i=/etc/profile.d/udisks-bash-completion.sh
+_src_etc_profile_d:10> [ -r /etc/profile.d/udisks-bash-completion.sh ']'
+_src_etc_profile_d:11> . /etc/profile.d/udisks-bash-completion.sh
+/etc/profile.d/udisks-bash-completion.sh:3> [ -z '' ']'
+/etc/profile.d/udisks-bash-completion.sh:3> return
+_src_etc_profile_d:9> i=/etc/profile.d/vim.sh
+_src_etc_profile_d:10> [ -r /etc/profile.d/vim.sh ']'
+_src_etc_profile_d:11> . /etc/profile.d/vim.sh
+/etc/profile.d/vim.sh:1> [ -n '' -o -n '' -o -n 4.3.10 ']'
...

输出还可以重定向到文件以供以后查看。

$ zsh -x 2>&1 | tee zsh.log

这看起来会在最后挂起,只需Ctrl+c即可停止它,然后查看生成的日志文件zsh.log.

答案2

您是否应用了更改source ~/.zshrc?或者注销并重新登录以使更改生效。

相关内容