【问题标题】:Is it possible to get output of all same time running sub-processes in Bash是否有可能在 Bash 中获得所有同时运行的子进程的输出
【发布时间】:2012-08-28 11:18:52
【问题描述】:

我有一个这样的 bash 代码。

while <some_condition>
do
    some_script &
done

我的目的是获取 some_script 代码的所有输出并分配一个变量。我试着写了

out=`some_script &`

但这一次 some_script 代码没有同时运行。我能做什么?

【问题讨论】:

    标签: bash subprocess


    【解决方案1】:

    您可以将后台命令重定向到临时文件,然后 wait 让它们完成并将输出收集回变量:

    while <some_condition>
    do
        temp=$(mktemp)
        temps=$temps" $temp"
        some_script > $temp &
    done
    wait
    output=$(cat $temps)
    rm $temps
    

    【讨论】:

    • bash 手册页建议使用更快的等效 $( &lt; $temps)
    • 您还可以通过在命令替换中包装整个while/wait 组合来消除临时文件:output=$( while ...; do some_script &amp;; done; wait)
    • @chepner: $(&lt; file) 只能用于单个文件。将整个循环包装到 $() 可以使输出行交错,这是您可能不想要的。
    • 你是对的;我错过了您在单个变量中将文件名列表传递给cat。我第一次阅读这个问题让我认为输出顺序并不重要,但现在我怀疑这也是错误的。如果您不介意,我会将我的 cmets 留在这里,作为相关但不相关的提示。
    猜你喜欢
    • 1970-01-01
    • 2021-04-26
    • 2021-10-03
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 2013-05-24
    • 2017-07-05
    • 1970-01-01
    相关资源
    最近更新 更多