代码: 全选
set +e
ECHO "unpacking source/lib/ncurses-5.5"
mkdir -pv source/lib
run_command_progress_float "tar -xvzf pub/tarball/ncurses-5.5.tgz -C source/lib/" 0 "tar -tzf pub/tarball/ncurses-5.5.tgz | wc -l"
ECHO "unpacking source/lib/expat-1.95.8"
mkdir -pv source/lib
run_command_progress_float "tar -xvzf pub/tarball/expat-1.95.8.tgz -C source/lib/" 0 "tar -tzf pub/tarball/expat-1.95.8.tgz | wc -l"
.......
代码: 全选
# $1: command
# $2: total
# $3: command to calc totals
run_command_progress_float()
{
local readonly RCP_RANGE=50
local rcp_lines=0
local rcp_nextpos=1
local rcp_total=0
local progress_bar=
local rcp_prog=0
local rcp_tmp=0
local prog_bar_base=
local rcp_percent=0
ECHO "run_command_progress_float: '$1'"
if [ -n "$3" ] ;
then
echo -n "Initializing progress bar ..."
rcp_total=`eval $3`;
echo -n "\r"
[ -z "$rcp_total" ] && rcp_total=1
else
[ -n "$2" ] && rcp_total=$2
fi
[ -z "$rcp_total" ] && rcp_total=1
[ $rcp_total -le 0 ] && rcp_total=1
prog_bar_base="[ ]"
while [ $rcp_tmp -lt $RCP_RANGE ]
do
prog_bar_base="$prog_bar_base-"
((rcp_tmp++))
# ((rcp_tmp+=1))
# rcp_tmp=$[rcp_tmp+1]
# echo "rcp_tmp=$rcp_tmp"
done
prog_bar_base="${prog_bar_base}|"
printf "\r$prog_bar_base\r"
set +e
eval $1 | while read line
do
((rcp_lines++))
if [ $rcp_lines -ge $rcp_nextpos ]
then
rcp_percent=`expr \( $rcp_lines \* 101 - 1 \) / $rcp_total `
rcp_prog=`expr \( $rcp_lines \* \( $RCP_RANGE + 1 \) - 1 \) / $rcp_total `
[ $rcp_prog -gt $RCP_RANGE ] && rcp_prog=$RCP_RANGE
rcp_nextpos=`expr \( \( $rcp_percent + 1 \) \* $rcp_total \) / 100`
[ $rcp_nextpos -gt $rcp_total ] && rcp_nextpos=$rcp_total
rcp_tmp=0
progress_bar=""
while [ $rcp_tmp -lt $rcp_prog ]
do
progress_bar="$progress_bar#"
((rcp_tmp++))
done
printf "\r$prog_bar_base\r[%3d%%]$progress_bar\r" $rcp_percent
fi
done
set -e
echo ""
}
不知到是怎么回事,请大家帮忙看看,应该怎么写。
谢谢!