我有一个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行如何被抑制?
答案 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
}