cron:运行一个源代码函数的脚本

时间:2016-04-01 06:12:20

标签: bash crontab

我有一些脚本可以做很多事情。它源自运行脚本的目录中的一堆函数。即。

/home/me/script.sh
/home/me/function1
/home/me/function2

如果我{/ 1}}进入/ home / me并运行cd一切正常。这些功能来源并做了需要做的事情。

但是,如果我尝试将其作为一个cron作业运行,它会一直运行直到我尝试获取函数,然后它就会停止并终止进程(如果我直接从目录运行它) ,至少我得到一些错误。)

同样明智的是,如果我尝试从另一个目录运行它,我会收到一堆错误。 e.g。

./script.sh

我确定这与环境变量有关,但我不知道哪些变量。我尝试过设置(在crontab中):

cd /opt/
/home/me/script.sh

function1: command not found
function2: command not found

但这也不起作用。任何帮助表示赞赏。我不想在函数的路径中硬编码,而是使它们相对于脚本所在的路径(最好是相同的目录)。

如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

您很可能意识到这一点,但要明确: shell函数没有路径。它们只需要通过获取包含它们的脚本加载到当前shell中:

source /path/to/functions

cd /path/to/functions
source functions

如果您正在谈论 shell程序(脚本),那么您需要考虑这样一个事实:在类Unix操作系统上,当前目录永远不会出现在PATH中默认值:

/path/to/functions/function1

cd /path/to/functions
./function1

您标记了自己的问题Bash,但请注意,要成为POSIX- 兼容(例如,如果使用sh),则必须使用.关键字(而不是Bash上的.source)并且适用与PATH相同的限制,请参阅dot

. ./function1