Bash脚本:禁止创建作业消息

时间:2016-08-18 20:54:21

标签: bash scripting jobs pid multiprocess

我有一个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 个答案:

答案 0 :(得分:2)

或者甚至更好,尝试使用gnu parallel来并行运行所有这些进程。

类似的东西:

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

答案 1 :(得分:2)

Shell在stderr上写入后台进程id,所以一种方法是在脚本中抑制stderr:

#!/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
}