【发布时间】:2014-10-05 01:40:06
【问题描述】:
我对 bash 有点陌生,我需要并行运行一个短命令数百次,但要按顺序打印输出。该命令将一个相当短的输出打印到标准输出,这是我不想松散的,或者它与另一个线程的输出混淆/混淆。在 Linux 中有没有办法运行多个命令(例如,并行不超过 N 个线程),以便按顺序打印所有命令输出(以任何顺序,只要它们不重叠)。
当前的 bash 脚本(完整代码here)
declare -a UPDATE_ERRORS
UPDATE_ERRORS=( )
function pull {
git pull # Assumes current dir is set
if [[ $? -ne 0 ]]; then
UPDATE_ERRORS+=("error message")
fi
for f in extensions/*; do
if [[ -d $f ]]; then
########## This code should run in parallel, but output of each thread
########## should be cached and printed sequentially one after another
########## pull function also updates a global var that will be used later
pushd $f > /dev/null
pull
popd > /dev/null
fi
done
if [[ ${#UPDATE_ERRORS[@]} -ne 0 ]]; then
# print errors again
fi
【问题讨论】:
-
谢谢,看起来很有希望,但是如果发生故障,我如何让每个线程向全局数组添加错误消息?
-
第 1 点)将
-k添加到您对 GNU Parallel 的调用中,以保持输出有序。第 2 点)定义一个函数,并确保将其导出,并将该函数传递给 GNU Parallel 执行 - 在函数内部,将错误消息附加到您的数组中。 gnu.org/software/parallel/…