我有一個腳本可以為多個檔案運行相同的步驟,如下所示:
f_list = 'a b c d'
for f in $f_list
do
echo "start process 1"
code to start process 1
echo "start process 2"
code to start process 2
echo "start process 3" #This step gets the input from step 2
code to start process 3 & #Takes long
echo "process 3 done for ${f} at `date`"
done
我想這樣做:一旦第 3 步開始為串列中的一個元素,迭代串列中的下一個元素而不等待第 3 步結束(無需等待),但是一旦第 3 步完成列印它完成的時間. 我想&在最后添加,但這并不是我想要的,因為它不會列印第 3 步完成的時間。
謝謝
uj5u.com熱心網友回復:
您可以將關聯的行包裹在一對大括號中,并將所述關聯放置在背景中,例如:
for f in $f_list
do
echo "start process 1"
code to start process 1
echo "start process 2"
code to start process 2
echo "start process 3" #This step gets the input from step 2
{ code to start process 3
echo "process 3 done for ${f} at $(date)"
} &
done
如果您需要運行大量步驟作為“流程 3”的一部分,您仍然可以使用{}包裝器,或者您可以使用函式對步驟進行模塊化,例如:
process_3() {
input_file=$1
do some stuff with "${input_file}"
do more stuff with "${input_file}"
do even more stuff with "${input_file}"
echo "process 3 done for ${input_file} at $(date)"
}
for f in $f_list
do
echo "start process 1"
code to start process 1
echo "start process 2"
code to start process 2
echo "start process 3" #This step gets the input from step 2
process_3 "${f}" &
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/520792.html
標籤:重击for循环
