2013-07-01 19 views
1

下面的腳本片段啓動shell腳本sqoopToHdfs.sh一次在選項卡每個條目,而是順序:如何啓動程序爲背景的bash內的循環

tabs="contracts employees resources" 
for t in $tabs; do /shared/sqoopToHdfs.sh $t >$t.out 2>&1 ; done 

但接下來嘗試啓動所有這些並行不工作:

for t in $tabs; do /shared/sqoopToHdfs.sh $t >$t.out 2>&1 **&**; done 

那麼,什麼是在後臺啓動正確的語法,在for循環(或達到同樣的效果)兼容嗎?

+0

了「可能重複」的標題就不會找到答案,我的問題非常有用 - 即使根本問題是一樣的。 – javadba

+0

而且沒關係。這就是我們爲您處理它的原因。 –

回答

2

for t in $tabs; do /shared/sqoopToHdfs.sh $t >$t.out 2>&1 & done 

林不知道多久你想這些運行添加&但是他們都會被綁在終端上,如果你關閉那個終端,你可以在這樣做後讓它們不能活着。

disown PID

+0

我將如何將(捕獲PID,disown PID)插入一個班輪? – javadba

+0

有幾個答案v彼此相似。我會授予這一獎項,因爲「不」是重要的,我以前沒有考慮過。 – javadba

+0

disown也可以前綴一個命令,所以應該能夠在'do'之後插入, – exussum

2

失去;

for t in $tabs; do /shared/sqoopToHdfs.sh $t >$t.out 2>&1 & done 
2

如果你想將它寫在一行:(&號之後沒有分號):

for t in $tabs; do /shared/sqoopToHdfs.sh $t > $t.out 2>&1 & done 

順便說一句,你應該使用更強大的語法和陣列:

tabs=(contracts employees resources) 
for t in "${tabs[@]}"; do /shared/sqoopToHdfs.sh "$t" > "$t.out" 2>&1 & done 

或(完全一樣):

tabs=(contracts employees resources) 
for t in "${tabs[@]}"; do 
    /shared/sqoopToHdfs.sh "$t" > "$t.out" 2>&1 & 
done 

(以及與此表,你會never've有問題!)

1

怎麼樣:

pins="" 
for t in $tabs; do 
    nohup /shared/sqoopToHdfs.sh $t >$t.out 2>&1 & 
    pins="$!,$pins" 
done