我不知道如何找到定义 bash 函数的文件(__git_ps1
在我的例子中)。
我尝试了declare
, type
, which
,但没有告诉我源文件。我在某处读到declare
可以打印文件名和行号,但没有解释如何打印。help
的页面也declare
没有说。
我怎样才能得到这些信息?
答案1
如果您准备运行该函数,那么您可以通过使用set -x
跟踪执行并设置PS4
变量来获取信息。
使用 启动 bash
--debugger
或使用它shopt -s extdebug
来记录额外的调试信息。设置
PS4
,跟踪时打印的“提示”以显示源行。打开追踪。
然后您可以运行您的函数,并且对于每一行,您将获得该函数的文件名。
用于
set +x
关闭跟踪。
所以对于这种情况你会运行
bash --debugger
PS4='+ ${BASH_SOURCE[0]} '
set -x ; __git_ps1 ; set +x
答案2
答案3
在 中似乎不可能bash
,但在 中却可以zsh
:
$ type __git_ps1
> __git_ps1 is a shell function from /usr/share/git/git-prompt.sh
答案4
声明一个具有相同名称的函数并尽早将其设置为只读,然后激活 xtrace 模式,如下所示:
__git_ps1(){ :;}
readonly -f __git_ps1
set -x
之后,当您登录时,您将看到包括文件来源的跟踪信息。当尝试声明现有只读函数时,您将看到一条错误消息。前面的最后一个源文件应包含您要查找的声明。
您可能需要将其放入系统 bash 配置文件中。还要记住在找到罪魁祸首后恢复更改。