2016-08-18 35 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