2016-04-06 256 views
0

我想編寫.sh腳本,它可以在同一個目錄中一個接一個地運行多個腳本,而不會同時運行它們(例如,當第一個腳本仍在執行時,第二個腳本沒有啓動執行)。連續運行sh腳本

你能告訴我這個命令,它可以寫在腳本名字前面嗎?

我試過source但它提供了以下消息中爲每一個腳本

./outer_script.sh: source: not found 
+0

已經嘗試過'bash'嗎?或'sh'?或'.'? –

+0

你不只是寫'script1; SCRIPT2; ...'?或者,如果它們尚不可執行或當前目錄不在PATH中(且腳本位於當前目錄中):'bash script1; bash script2; ...'。shell在默認情況下按順序執行命令。 –

+0

- Jonathan Leffler 謝謝!工作得很好! – Reqwy

回答

0

這是bash腳本的正常行爲。也就是說,如果你有三個腳本:

script1.sh:

echo "starting" 
./script2.sh 
./script3.sh 
echo "done" 

script2.sh:

while [ 1 ]; do 
    echo "script2" 
    sleep 2 
done 

和script3.sh:

echo "script3" 

輸出是:

starting 
script2 
script2 
script2 
... 

和script3.sh永遠不會被執行,除非你修改script1.sh是:

在這種情況下
echo "starting" 
./script2.sh & 
./script3.sh & 
echo "done" 

輸出將是這樣的:

starting 
done 
script2 
script3 
script2 
script2 
... 

因此,在這種情況下,我假設你的第二級腳本包含啓動新進程的東西。

1

source是慶典推出的非標準擴展。 POSIX指定您必須使用.命令。除名稱外,它們是相同的。

但是,您可能不希望來源,因爲那是只有應該用於需要腳本才能夠更改腳本調用它的狀態。它就像是其他語言中的#includeimport語句。

您通常會直接以命令的形式直接運行腳本,即不要使用source或任何其他命令作爲前綴。

由於沒有使用源的一個簡單的例子:

for script in scripts/*; do 
    "$script" 
done 

如果上述方法無效,請確保您已設置可執行位(chmod a+x)在必要的腳本。

0

您是否在您的outer_script中包含了行!#bin/bash?有些操作系統默認不認爲它是bash,而源代碼是bash命令。否則只需在外部腳本中使用./path/to/script.sh調用腳本