![](/img/trans.png)
[英]How to run a shell script with multiple statements in a single command line?
[英]Run multiple shell scripts in a single script
我有50個Shell腳本:proc_0.sh,proc_500.sh,proc_1000.sh ... proc_25000.sh。
它們每個執行相同的操作,但對不同的文件執行。
我想在一個主shell腳本中一個接一個地執行所有這些shell腳本。
到目前為止,這是我嘗試過的:
#!/bin/bash/
cd $(pwd)
i=0
for i in {0..25000..500}
do
chmod +x proc_${i}.sh
bash proc_${i}.sh
done
exit
現在,我對此不太確定,但似乎這些腳本正在並行運行或以某種方式混合在一起。 我之所以這樣說,是因為當我分別運行其中一些腳本時,它們會給出正確的結果,但以上述方式運行時卻不能。 這些腳本正在執行的程序也可能有問題。
那么,有誰能告訴我這是否是一個又一個地運行多個shell腳本的正確方法? 這將幫助我縮小問題的范圍。
謝謝
不,您的操作方式有些混亂。
#!/bin/bash/
刪除最后一個斜杠,否則將不起作用
cd $(pwd)
這與cd .
相同cd .
.cd到當前目錄是偽造的。 從腳本中刪除它。
i=0
您也可以刪除它:它后面是for循環,該循環已經初始化$ i
chmod +x proc_${i}.sh
每當此腳本運行時,您都在顯式設置執行標志。 它沒有害處,但是一次就足夠了。
bash proc_${i}.sh
您無需使用“ bash”語句。 無論如何,它都不會運行,因為您忘記了命令的路徑。 除非從/ usr / local / bin之類的目錄中運行此文件,否則:始終使用路徑!
不,您的腳本不能並行運行。 您忘記了背景。
試試這個代替:
#!/bin/bash
for i in {0..25000..500}
do
/path/to/proc_${i}.sh & #<- don't forget to replace "/path/to" with the
done # real directory where the proc_ files reside
wait
這將使您的計算機同時充滿50個進程。
運行top
以查看它們的運行情況。
最好將所有這些proc腳本排在一個子目錄中,然后運行:
#!/bin/bash
for i in "/path/to/procscripts/"*
do
"$i" &
done
wait
這樣可以使自己更靈活,更輕松。
此外,使所有腳本都可以執行可能會更容易:
chmod a+x "/path/to/procscripts/"*
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.