我习惯使用“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
。