Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在旧版本的Bash中运行并行进程-3.2版_Bash - Fatal编程技术网

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

在旧版本的Bash中运行并行进程-3.2版,bash,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" ];

我正在尝试同时运行多个进程:

#!/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.

我是10上的用户,没有。在仍然能够从提示中指定会话数的情况下,是否有一种方法可以做到这一点?

假设您不介意轮询解决方案,一种简单/快速的n-dirty方法基于计算后台
作业的数量

j=0
for i in $(ls "$d"); do

    while [[ $(jobs | wc -l) -ge ${pro_count} ]]
    do
            sleep 2
    done

    nodeb_job &
done 
wait

将睡眠时间(本例中为2秒)调整到环境中有意义的任何时间。例如,如果
nodeb\u job()
调用预计需要几分钟时间,并且您并不着急,那么您可以执行类似于
sleep 30
的操作。另一方面,如果
nodeb_job()
调用很快,并且/或者您希望快速启动下一个作业,那么
sleep 1
可能是合适的

“它不起作用”。您遇到了什么错误?@bishop
bash:wait:-n:invalid option
添加该选项是因为以前没有好的方法来执行此操作。你能在你的机器上安装更新版本的
bash
吗?@Barmar我对这台机器没有管理权限。你有什么理由不把GNU Parallel下载到你自己的目录中吗?或者使用
parallel--embed
在另一个系统上生成脚本?原因是:这对我有帮助,因为我的env使用的是较旧版本的Bash。谢谢