我不知道如何找到定义了 bash 函数的文件(__git_ps1
在我的例子中)。
我尝试了declare
, type
, which
,但没有告诉我源文件。我在某处读到declare
可以打印文件名和行号的地方,但没有解释如何。在help
对页面declare
不说,要么。
我怎样才能得到这些信息?
ica*_*rus 41
如果您准备运行该函数,那么您可以通过使用set -x
跟踪执行和设置PS4
变量来获取信息。
--debugger
使用bash 启动或使用其他shopt -s extdebug
方式记录额外的调试信息。
设置PS4
,跟踪时打印的“提示”以显示源代码行。
开启追踪。
然后您可以运行您的函数,对于每一行,您将获得该函数的文件名。
用于set +x
关闭跟踪。
因此,对于这种情况,您将运行
bash --debugger
PS4='+ ${BASH_SOURCE[0]} '
set -x ; __git_ps1 ; set +x
Run Code Online (Sandbox Code Playgroud)
ica*_*rus 32
如果您不愿意运行该功能,您仍然可以设置调试并获取信息。步骤是
bash --debugger
或shopt -s extdebug
在定义函数之前。declare -F __git_ps1
它会报告函数的定义位置。
与使用 PS4 查看带注释的执行跟踪相比,此方法的优点是
执行跟踪的优点是
我强烈建议shopt -s extdebug
在两者的开头都包含~/.bashrc
并~/.bash_profile
涵盖在不同调用案例中使用的不同文件。
pfn*_*sel 13
似乎不可能bash
,但它在zsh
:
$ type __git_ps1
> __git_ps1 is a shell function from /usr/share/git/git-prompt.sh
Run Code Online (Sandbox Code Playgroud)
@icarus 的伟大解决方案适用于函数,只要它们是按字面定义的,而不是eval
另一个文件内容的结果(其中带有 的文件eval
将显示为源)。它不会打印别名、shell 内置程序(如echo
)和可执行文件(二进制或非二进制)的源文件,我相信这些信息一般不可用。某些命令可能会在正常执行过程中或响应信号时打印其源文件(甚至可能是真实的)。
__git_ps1
在定义/usr/share/git/git-prompt.sh
和/usr/share/git/completion/git-prompt.sh
我的系统,Arch Linux的,所以它可能是你的一样。
看一看在调用的部分man bash
,如果你想看看在外壳开始专门采购的命令-他们可能采购其他文件,这反过来源的其他文件。