我有一些脚本可以做很多事情。它源自运行脚本的目录中的一堆函数。即。
/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
但这也不起作用。任何帮助表示赞赏。我不想在函数的路径中硬编码,而是使它们相对于脚本所在的路径(最好是相同的目录)。
如果您需要更多信息,请与我们联系。
答案 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