我有一个 bash 脚本,它启动 >20 个子进程(&
在后台启动的函数),并希望包含一个进度指示器,告诉用户有多少子进程已经在运行。
问题是这些子进程需要相当长的时间来启动(大约 20 秒,具体取决于网络)。有没有一种方法可以计算已成功启动的子进程的数量?
我可以将任何代码放入 bash 函数中,该函数将在子进程准备就绪时运行。但是我不知道增加全局变量的好方法,该变量保存着准备好的作业数量。
答案1
您可以使用外部文件作为全局变量。这是一个例子。
file="$(mktemp)"
f() { sleep 3; echo x; sleep 3; }
for i in {1..10} ; do
>>"$file" f &
done
switch=true
while $switch; do
sleep 1
cnt=$(wc -l "$file")
cnt="${cnt%%${file}}" #this is needed to remove the file name
#from the output of wc -l
echo "$cnt"
[ "$cnt" -ge 5 ] && switch=false
done
rm "$file"
将其保存到example
并采购给出:
$ . example
0
0
10
一旦您有权访问
cnt=$(wc -l "$file")
cnt="${cnt%%${file}}"
将此代码修改为进度条很容易。
不要忘记[ "$cnt" -ge 5 ] && switch=false
根据您的情况调整永恒循环断路器。