2016-04-01 17 views
0

我有腳本可以處理一堆東西。它提供了一系列腳本運行目錄中的函數。即cron:運行一個源代碼函數的腳本

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

如果我cd成/家庭/我和運行./script.sh一切工作正常。這些功能來源並做了需要做的事情。但是,如果我嘗試運行這個作爲一個cron作業,它會運行直到我試圖獲取函數,然後它只是停止和過程終止(如果我直接從目錄,至少我得到一些錯誤)。

像明智一樣,如果我嘗試從另一個目錄運行這個,我會遇到一堆錯誤。例如

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

function1: command not found 
function2: command not found 

我敢肯定這與環境變量有關,但我不知道哪一個。我試過設置(在crontab中):

PATH=/home/me 
SHELL=/bin/bash 

但是這也行不通。任何幫助表示讚賞。我不想在函數的路徑中進行硬編碼,而是使它們相對於腳本所在的路徑(最好是相同的目錄)。

如果您需要更多信息,請讓我知道。

+1

向我們展示script.sh function1 function2內容,以及如何編寫你的crontab – sigmalha

回答

1

你很可能意識到了這一點,但只是要清楚:A 外殼功能沒有路徑。他們只需要通過獲取包含它們的腳本加載到當前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),您必須使用.關鍵字(而不是要麼.source上的Bash)和關於PATH作爲命令執行應用相同的限制,請參見dot

. ./function1