2017-04-07 66 views
0

我有一個像下面這樣的shell腳本,我想用它來以非阻塞的方式執行一系列命令,也就是說,只要其中一個命令循環是執行我希望腳本繼續下一個命令。從shell腳本內部的nohup命令阻止腳本exeuction

#!/bin/bash 

declare -a parameters=("param1" "param2" "param3") 

for parameter in "${parameters[@]}" 
do 
    command="nohup mycommand -p ${parameter} 1> ${parameter}_nohup.out 2>&1 &" 
    ${command} 
done 

然而,對於每一個命令腳本塊,直到它完成繼續的for循環執行下一個命令的下一個迭代之前執行。而且,該命令的輸出將重定向到nohup.out,而不是指定用於記錄輸出的文件名。爲什麼shell腳本中的nohup行爲不同?

我的分佈的Debian GNU/Linux的8(傑西)

+0

避免編寫輸出重定向到變量。 – Cyrus

+0

當我輸出命令時,輸出文件的名稱是正確的,因此對於第一個參數,它將是'nohup mycommand -p param1 1> param1_nohup.out 2>&1&',但輸出將轉到nohoup.out,無論。 – Vasilis

回答

2

當執行一個命令你想,這個重定向的方式和&字符失去其特殊含義。

做這樣的:

#!/bin/bash 
declare -a parameters=("param1" "param2" "param3") 
for parameter in "${parameters[@]}" 
do 
    nohup mycommand -p $parameter 1> ${parameter}_nohup.out 2>&1 & 
done 
+2

查看[BashFAQ#50:我試圖把一個命令放在一個變量中,但是複雜的情況總是失敗!](http://mywiki.wooledge.org/BashFAQ/050)以獲得更多細節。 –