在旧版本的bash中运行并行进程 - 版本3.2

时间:2018-04-09 19:58:03

标签: bash

尝试同时运行多个进程:

#!/usr/bin/env bash

read -r -p "Enter number of sessions: " pro_count
read -r -p "directory of files: " d

nodeb_job() {
    printf 'Connecting to %s\n' "$i"
    cd || exit
    if [ ! -d "$d" ]; then
        mkdir "$d"/log
    fi
    foo "$i" "$d"/"$i" >  "$d"/log/"$i"
    printf 'Done with %s\n' "$i"
}

j=0
for i in $(ls "$d"); do
    if (( j++ >= pro_count )); then
        wait -n 
    fi
    nodeb_job &
done 
wait

它没有用,因为我有一个旧版本的bash。

user@dacc2:~$ bash --version
GNU bash, version 3.2.57(1)-release (i386-pc-solaris2.10)
Copyright (C) 2007 Free Software Foundation, Inc.

我是solaris 10上的用户,没有gnu并行。有什么方法可以做到这一点,同时仍然可以从提示中指定会话数量?

1 个答案:

答案 0 :(得分:1)

假设您不介意轮询解决方案,基于计算背景数{... 1}的一种简单/快速肮脏的方法......

jobs

将睡眠时间(本例中为2秒)调整为env中有意义的值。例如,如果j=0 for i in $(ls "$d"); do while [[ $(jobs | wc -l) -ge ${pro_count} ]] do sleep 2 done nodeb_job & done wait 来电预计需要几分钟时间,并且您不是很匆忙,那么您可以执行nodeb_job()之类的操作。另一方面,如果sleep 30来电很快和/或您希望快速开始下一份工作,那么nodeb_job()可能是合适的......?