如果在 zsh 中,我输入set
并看到precmd_functions=(_precmd_function_dostuff _precmd_function_domore)
.
_precmd_function_dostuff
和是在哪里_precmd_function_domore
定义的(即它们是在文件中定义的吗?哪个文件?)?
我可以输入来查看和functions
的定义,但这并没有告诉我它们的定义位置。_precmd_function_dostuff
_precmd_function_domore
答案1
在 zsh 5.3 或更高版本中,
type _precmd_function_domore
应该返回类似的东西
_precmd_function_domore is a shell function from /usr/local/etc/zshrc.d/80-PetaLinux
对于zsh
5.4 或更高版本,您还可以使用:
echo $functions_source[_precmd_function_domore]
当您zsh
使用该xtrace
选项运行时(如使用zsh -x
),它会在 stderr 上写入调试信息,显示它运行的每个命令(但不是函数定义)。您可以修改该$PS4
变量(用于输出的提示变量xtrace
,请参阅参考资料info zsh PS4
),以便它为您提供更多信息,例如它运行的每个命令、从哪个文件以及从每行读取该命令。
PS4='+%x:%I> ' zsh -x 2> >(grep precmd_func)
将运行一个新的 zsh 交互式 shell 实例,并通过 grep 过滤 stderr 以显示包含precmd_func
.
或者使用zsh
,您可以在和in下调用该_precmd_function_domore
函数,以查看从何处读取函数定义:xtrace
%x:%I
$PS4
$ grep -n precmd ~/.zshrc
192:precmd_foo() echo foo
$ (PS4='+%x:%I> '; set -x; precmd_foo)
+zsh:2> precmd_foo
+/home/stephane/.zshrc:194> echo foo
foo
(不过请注意此处的行号相差两行)。