运行脚本时找不到 .zshrc 中定义的函数

运行脚本时找不到 .zshrc 中定义的函数

我有一个.zshrc主要更新的功能PATH

my_function()
{
        PATH=...
}

以及一些依赖于它的脚本,例如my_script.sh以下行开头:

my_function
# do stuff ...

然后我有以下内容crontab

00 02 * * * /path/to/my/zsh /path/to/my_script.sh

但我注意到,即使我手动运行my_script.sh./my_script.sh即从我的交互式(?)Zsh shell),我也会收到错误:

Command not found: my_function

即使我可以完美地my_function从终端调用。

为什么?我想要一个解决方案不是要求我在我的脚本中添加一个 shebang(有关更多信息,请参见

成立如下图。我想在我的例子中,cron 会启动一个非交互式、非登录 shell,这就是为什么没有运行任何 init 文件。那是对的吗?

在此输入图像描述

答案1

将您的函数放入.zshenv.

.zshenv-f除非设置了该选项,否则将在 shell 的所有调用中获取源。它应该包含设置命令搜索路径的命令,以及其他重要的环境变量。.zshenv不应包含产生输出的命令或假设 shell 连接到 tty。

.zshrc源自交互式 shell。它应该包含设置别名、函数、选项、键绑定等的命令。

http://zsh.sourceforge.net/Intro/intro_3.html

答案2

我喜欢将 shell 函数定义与 .zshrc 分开。

因此,无论如何,我很幸运地通过在 $PATH 中包含包含 zsh 函数的目录 ($HOME/.zsh) 来从 emacs 访问 shell 函数。

一如既往,YMMV。

相关内容