我有一个.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