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

バージョン 5.4 以降の場合は、zsh以下も使用できます。

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インタラクティブシェルインスタンスが実行され、stderrはgrepでフィルタリングされますprecmd_func

または を使用して関数zshunder および 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

(ただし、ここの行番号は2行ずつ異なりますのでご注意ください。)

関連情報