我想編寫.sh腳本,它可以在同一個目錄中一個接一個地運行多個腳本,而不會同時運行它們(例如,當第一個腳本仍在執行時,第二個腳本沒有啓動執行)。連續運行sh腳本
你能告訴我這個命令,它可以寫在腳本名字前面嗎?
我試過source
但它提供了以下消息中爲每一個腳本
./outer_script.sh: source: not found
我想編寫.sh腳本,它可以在同一個目錄中一個接一個地運行多個腳本,而不會同時運行它們(例如,當第一個腳本仍在執行時,第二個腳本沒有啓動執行)。連續運行sh腳本
你能告訴我這個命令,它可以寫在腳本名字前面嗎?
我試過source
但它提供了以下消息中爲每一個腳本
./outer_script.sh: source: not found
這是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
...
因此,在這種情況下,我假設你的第二級腳本包含啓動新進程的東西。
source
是慶典推出的非標準擴展。 POSIX指定您必須使用.
命令。除名稱外,它們是相同的。
但是,您可能不希望來源,因爲那是只有應該用於需要腳本才能夠更改腳本調用它的狀態。它就像是其他語言中的#include
或import
語句。
您通常會直接以命令的形式直接運行腳本,即不要使用source
或任何其他命令作爲前綴。
由於沒有使用源的一個簡單的例子:
for script in scripts/*; do
"$script"
done
如果上述方法無效,請確保您已設置可執行位(chmod a+x
)在必要的腳本。
您是否在您的outer_script中包含了行!#bin/bash?有些操作系統默認不認爲它是bash,而源代碼是bash命令。否則只需在外部腳本中使用./path/to/script.sh調用腳本
已經嘗試過'bash'嗎?或'sh'?或'.'? –
你不只是寫'script1; SCRIPT2; ...'?或者,如果它們尚不可執行或當前目錄不在PATH中(且腳本位於當前目錄中):'bash script1; bash script2; ...'。shell在默認情況下按順序執行命令。 –
- Jonathan Leffler 謝謝!工作得很好! – Reqwy