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

Jos*_*osh 8 zsh shell-script

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

my_function()
{
        PATH=...
}
Run Code Online (Sandbox Code Playgroud)

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

my_function
# do stuff ...
Run Code Online (Sandbox Code Playgroud)

然后我有以下内容crontab

00 02 * * * /path/to/my/zsh /path/to/my_script.sh
Run Code Online (Sandbox Code Playgroud)

但我注意到,甚至当我运行my_script.sh./my_script.sh手动(即从我的互动()岩组的壳呢?),我得到的错误:

Command not found: my_function
Run Code Online (Sandbox Code Playgroud)

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

为什么?我想,它的解决方案要求我去认领添加到我的脚本(更多关于这个看这个

找到了下图。我想在我的情况下,cron 启动了一个非交互式、非登录的 shell,这就是为什么没有运行任何 init 文件的原因。那是对的吗?

在此处输入图片说明

小智 16

将您的功能放入.zshenv.

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

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

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