2017-04-19 195 views
1

我想從一個shell腳本里面UNIX調用另一個shell腳本(bash)的如何從shell腳本調用另一個shell腳本的Unix

1日shell腳本(script_1.sh):

VARIABLE_1=<VALUE> 
<unix_code> 
<unix_code> 
.. 
.. 
.. 
export VARIABLE_1 
bash -x script_2.sh 
bash -x script_3.sh 

我在這裏的要求是將VARIABLE_1的值傳遞給script_2.sh & script_3.sh。我能夠執行script_2.sh將參數傳遞給script_2.sh,並且工作正常。問題已經開始,當我包含script_3.sh。它給我下面的錯誤,當我執行第一個shell腳本。

/usr/bin/sh: /usr/bin/sh: cannot execute binary file 

不知道爲什麼會發生這種情況。另外,這是推薦的方式來傳遞參數並調用其他shell腳本?請讓我知道

+1

script_3.sh在script_1.sh之外執行時是否正常運行? –

+0

檢查您是否可以從命令行運行'/ usr/bin/sh'。它看起來像'script_3.sh'在某處調用'/ usr/bin/sh'。 – cdarke

+0

你可以顯示完整的錯誤輸出,特別是錯誤前面的'xtrace'('-x')輸出嗎? – cdarke

回答

-1

script_3.sh可能沒有執行權限。使用chmod提供適當的權限,然後再試一次

1

cannot execute binary file並不表示該文件缺少執行權限。實際上,將腳本作爲「bash文件名」運行,不需要文件名的可執行權限。

錯誤消息告訴您腳本文件不是實際的腳本文件,而是一個二進制文件,可能是一個可執行文件。如果是這樣的話,不要做:

bash +x filename 

只是做:

filename 

此外,將參數傳遞給腳本,你可以這樣做是這樣的:

scriptfile arg1 arg2 arg3

然後在您的腳本中提及$1,$2$3。或$*來指代所有這些。

編輯:

還要注意執行一個腳本,你不需要使用bash scriptfile,你可能只是運行scriptfile。在這種情況下,scriptfile必須具有可執行權限(即,chmod +x scriptfile)。此外,如果該文件位於當前目錄中,但.不是PATH變量的一部分,則將找不到腳本文件。在這種情況下,你應該執行你的腳本文件爲./scriptfile

你的腳本將改變爲:

VARIABLE_1=<VALUE> 
... 
./script_2.sh "$VARIABLE_1" 
./script_3.sh "$VARIABLE_1" 

您不再需要導出VARIABLE_1。引號是確保VARIABLE_1的內容作爲單個參數傳遞的必要條件。 script_2.sh和script_3.sh將看到值爲$1。如果VARIABLE_1中有空格,並且您省略了引號,則每個單詞都將作爲單獨的值傳遞。也就是說,$1將會有第一個字,$2第二個等等。

+0

我認爲錯誤信息意味着'/ usr/bin/sh'不能被執行。如果是腳本名稱,那麼它會說'script_3.sh:script_3.sh不能執行二進制文件' – cdarke

+1

我想知道script_3.sh內容是什麼。也許錯誤信息來自script_3.sh內部執行的內容,而不是來自script_3.sh – kontiki

+0

的實際調用,這是我的猜測,但OP沒有回答我的問題 – cdarke