代码 1 ,并发
#!/usr/bin/env sh
# 管道
tmp_fifofile=/tmp/1001.fifo
mkfifo $tmp_fifofile
exec 1001<> $tmp_fifofile
rm $tmp_fifofile
# 线程数
thread=4
for i in `seq $thread`
do
echo >&1001
done
for i in {1..254}
do
read -u 1001
{
sleep 0.5
echo >&1001
}& # 并发执行
done
wait
exec 1001>&- # 释放文件描述符
echo "all finish..."
代码 2 进度条
#!/usr/bin/env sh
i=0
b=""
array=('-' '\\' '|' '/')
while [ $i -le 100 ]
do
let idx=i%4
printf "\e[34m\033[40m[%-100s]\e[32m\033[40m [%d%%] \e[30m \033[42m [%c] \e[0m\r" "$b" "$i" "${array[$idx]}"
b+='#'
sleep 0.02
let i++
done
echo ''
想把两段代码结合在一起
# 简写
b=""
do
{
# 想在代码 1 这,显示进度条
b+="#"
echo "$b"
# b 的结果 永远等于#,不能叠加
}&
done
export b 环境变量也不行,想不到别的方法了 如果是 python ,global 声明一下就好了
想把两段代码结合在一起,或者有没相关控制并发显示进度条的例子?
1
levenwindy OP 附:
do read -u 1001 如果将代码放在这就没问题,但是带来的问题就是,并发代码都没执行完,进度条就已经跑了 { }& done |