如果在 zsh 中,我输入set并查看precmd_functions=(_precmd_function_dostuff _precmd_function_domore).
在哪里_precmd_function_dostuff和_precmd_function_domore定义(即它们是在文件中定义的?哪个文件?)?
我可以输入functions以查看_precmd_function_dostuffand的定义_precmd_function_domore,但这并没有告诉我它们的定义位置。
在 zsh 5.3 或更高版本中,
type _precmd_function_domore
Run Code Online (Sandbox Code Playgroud)
应该返回类似的东西
_precmd_function_domore is a shell function from /usr/local/etc/zshrc.d/80-PetaLinux
Run Code Online (Sandbox Code Playgroud)
使用zsh5.4 或更高版本,您还可以使用:
echo $functions_source[_precmd_function_domore]
Run Code Online (Sandbox Code Playgroud)
当您zsh使用该xtrace选项(如 with zsh -x)运行时,它会在 stderr 上写入调试信息,显示它运行的每个命令(尽管不是函数定义)。您可以修改$PS4变量(用于xtrace输出的提示变量,请参阅参考资料info zsh PS4),以便它为您提供更多信息,例如它运行的每个命令、从哪个文件读取命令以及在每一行上读取该命令。
PS4='+%x:%I> ' zsh -x 2> >(grep precmd_func)
Run Code Online (Sandbox Code Playgroud)
将运行一个新的 zsh 交互式 shell 实例,stderr 由 grep 过滤以显示包含precmd_func.
或者使用zsh,您可以_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
Run Code Online (Sandbox Code Playgroud)
(不过请注意这里的两行数)。
| 归档时间: |
|
| 查看次数: |
2385 次 |
| 最近记录: |