Bash 脚本:抑制作业创建消息

Bash script: Suppress job creation message

我有一个 bash 函数可以并行运行几个子进程,如下所示:

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

在 sourcing 和 运行 这个 (. scriptfile; check) 上,+m 已经成功地抑制了作业完成输出,但它仍然在创建时显示进程 ID,例如:

[1] 123
[2] 456

如何抑制这些 ID 行?

或者更好的是,尝试使用 gnu 并行 运行 所有这些进程并行。

类似于:

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

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
}