【问题标题】:Bash script: Suppress job creation messageBash 脚本:禁止创建作业消息
【发布时间】:2016-12-25 22:09:56
【问题描述】:

我有一个 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 行?

【问题讨论】:

    标签: bash scripting jobs pid multiprocess


    【解决方案1】:

    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
    }
    

    【讨论】:

      【解决方案2】:

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

      类似:

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

      【讨论】:

        猜你喜欢
        • 2021-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-15
        • 2013-10-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多