【发布时间】:2017-12-08 15:37:19
【问题描述】:
下面我有一个脚本,它收集各个命令的进程 ID,并将它们附加到 bash 中的数组中。出于某种原因,正如您在下面看到的标准输出,最终结果数组仅包含一项,即最新的 id。这个脚本末尾的 PROCESS_IDS 数组如何包含所有四个进程 ID?
PROCESS_IDS=()
function append {
echo $1
PROCESS_IDS=("${PROCESS_IDS[@]}" $1)
}
sleep 1 && echo 'one' & append $! &
sleep 5 && echo 'two' & append $! &
sleep 1 && echo 'three' & append $! &
sleep 5 && echo 'four' & append $!
wait
echo "${PROCESS_IDS[@]}"
这是标准输出:
83873
83875
83879
83882
three
one
four
two
83882
【问题讨论】:
-
尝试删除前三行末尾的
&。 -
@pavel 我希望这四行并行运行。
-
我只是问过你问过,它确实有效。但是,我想并行运行它们,我仍然可以从
append和echos 中访问$1变量,它只是没有正确存储到数组中。 -
process_ids+=( "$!" )是一种相当简洁的附加到数组的方法。 -
@ThomasReggi 如果您从末尾删除 &,睡眠仍将并行运行。它只是串行运行的数组的分配。