在zsh中,precmd_functions在哪里定义?

在zsh中,precmd_functions在哪里定义?

如果在 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

对于zsh5.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

(不过请注意此处的行号相差两行)。

相关内容