簡體   English   中英

在一個腳本中運行多個Shell腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM