目前我的 ZSH 有一些源函数,例如:
% declare -f
... a lot of shell functions appears here.
我目前正在编写一个 shell 脚本,它将从该列表中调用一个特定的函数(prompt_dir
来自 Powerlevel9k 的 Oh-My-Zsh 主题)。
我的脚本是:
#!/bin/zsh
echo_prompt_segment(){
# bunch of source-code here
}
zsh_oddeven_dir(){
prompt_dir echo
}
zsh_oddeven_dir
问题是我的脚本无法访问这些功能:
% ./oddeven-pwd.sh
zsh_oddeven_dir:1: command not found: prompt_dir
当我declare -f
从脚本内部执行操作时,脚本中只有这两个函数:
% ./oddeven-pwd.sh
echo_prompt_segment () {
}
zsh_oddeven_dir () {
declare -f
}
我可以访问并运行脚本上方声明的那些函数吗?如果可以,该怎么做?
答案1
由于脚本默认在子 shell 中运行,因此您需要的功能是导出函数,在 中可用bash
,但在 中不可用zsh
。
在bash
标准位置添加用户函数是在,但除非是交互式的(具体来说,不是在运行脚本的子 shell 中),~/.bashrc
否则不会执行此操作,而导出函数可以克服这一点。bash
什么似乎有效,按照这个答案,就是把你的函数声明放在里面~/.zshenv
,每次启动时都会默认执行,无论是否交互。
您还应该看看前面的(已接受的)答案,其中除其他内容外还解释了zsh
不支持导出函数的原因。