2016-08-18 49 views
3

我有一個運行在平行幾個子流程一個bash的功能,如:bash腳本:抑制創造就業機會的消息

#!/bin/bash 
function check() { 
    set +m 
    for f in foo bar ; do 
    (
     if [ -f $f ] ; then ls -la $f >> all; fi 
    ) & 
    done 
    wait 
} 

在採購和運行這個(. scriptfile; check),該+m已成功地抑制工作完成輸出,但它仍然在創建時顯示進程ID,如:

[1] 123 
[2] 456 

這些ID行怎麼會被壓制?

回答

2

殼牌標準錯誤寫入後臺進程ID這樣的一個方式,是抑制你的腳本中標準錯誤:

#!/bin/bash 
function check() { 
    set +m 
    for f in foo bar ; do 
    { 
     if [ -f $f ] ; then ls -la $f >> all; fi 
    } & 
    done 2>/dev/null 
    wait 
} 
+1

簡單,做工精細,謝謝。 – mahemoff

2

甚至更​​好,嘗試使用gnu parallel並行運行所有這些進程。

類似:

parallel -P 5 'if [ -f {} ] ; then ls -la {} >> all' ::: foo bar