“哪个提示”给出的函数在哪里定义的?

“哪个提示”给出的函数在哪里定义的?

我习惯使用“which stuff”来查找当我使用“stuff”时将被调用的文件。我很惊讶地看到“哪个提示”的回应

prompt () {
        local prompt_opts
        set_prompt "$@"
        (( $#prompt_opts )) && setopt noprompt{bang,cr,percent,subst} "prompt${^prompt_opts[@]}"
        true
}

在我的 Archlinux 系统上。这是从哪里来的,如何使提示命令在我当前正在构建的 chroot 环境中可用? (我刚刚将其他命令复制到其中......这在这里不起作用=))

编辑:我使用 zsh 作为我的 shell,也许这会改变一些东西。

答案1

运行时得到的命令which是一个名为 的函数prompt。输出就是它的定义。

您也可以使用以下命令查看它:

$ declare -f prompt

提示()函数在哪里?

这有点棘手。您将不得不求助于使用诸如grep查找字符串“ prompt ()”之类的工具。通常查看的地方如下:

巴什

(注:不要which在 bash 中使用,type而是使用

$ grep -R "prompt ()" .bashrc .bash_profile /etc/bashrc /etc/profile*

桀骜

$ grep -R "prompt ()" <files>

zsh从手册页来看,这些是使用的文件:

   $ZDOTDIR/.zshenv
   $ZDOTDIR/.zprofile
   $ZDOTDIR/.zshrc
   $ZDOTDIR/.zlogin
   $ZDOTDIR/.zlogout
   ${TMPPREFIX}*   (default is /tmp/zsh*)
   /etc/zshenv
   /etc/zprofile
   /etc/zshrc
   /etc/zlogin
   /etc/zlogout    (installation-specific - /etc is the default)

它应该位于这些位置之一。如果它没有出现在任何这些地方,那么您需要扩大搜索范围。我建议只寻找字符串“ prompt”。

答案2

prompt本身并没有用:它正在调用另一个名为 的函数set_prompt,您也需要这个函数(及其所有依赖项)。

首先要寻找的是自动加载的函数。

print -rl $fpath/prompt(N)

除此之外,请在初始化文件和函数加载路径上的文件中搜索函数定义。

grep -E '^ *function +prompt($|[^0-9A-Z_a-z])|^ *prompt *\(' ~/.z* /etc/zsh/*(.N) /etc/z*(.N) $fpath/*(.)

prompt函数的定义是…/Prompts/promptinit:它是提示主题成分。除了 之外promptinit,您还需要prompt_*_setup您选择的提示主题的文件。查看您~/.zshrc选择的提示主题 - 调用函数prompt

相关内容