2014-05-16 37 views
2

我想返回也可以啓動後臺任務的腳本的結果。命令替換運算符等待後臺任務,使通話變慢。我創建了以下示例來說明問題:對執行後臺任務的腳本執行bash命令替換

function answer { 
    sleep 5 & 
    echo string 
} 

echo $(answer) 

有沒有辦法調用命令而不等待它創建的任何後臺作業?

感謝,

馬克

回答

2

的問題是,sleep繼承stdout和保持打開狀態。你可以簡單地重定向標準輸出:

answer() { 
    sleep 5 > /dev/null & 
    echo "string" 
} 
echo "$(answer)" 
+0

這就是發生了什麼事。謝謝!! –

0

如果您打算爲節目沿,而函數工作的平均時間歡快地繼續下去,你可以調用該函數在後臺運行。

function answer { 
    sleep 5 
    echo Second 
} 

echo $(answer) & 
echo First 

它的輸出將是

First 
Second 
+0

不幸的是,在現實世界的例子中,我需要腳本返回的內容。 –

+0

我把這些命令放入一個tmp.sh文件,然後使用sh tmp.sh> out.txt運行它,輸出文件工作得很好。 –