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