运行在我的 Shell 脚本之外声明的函数

运行在我的 Shell 脚本之外声明的函数

目前我的 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不支持导出函数的原因。

相关内容