我想在运行以下代码时显示进度条。我正在这段代码中调用一个脚本,该脚本可能需要一段时间,具体取决于传入的变量。我已经尝试了How to add a progress bar to a shell script?中的某些实现,但无法使其正常工作。从理论上讲,应该根据进程是否仍在运行来继续进行。如果它仍在运行,则显示进度条。
cat $BLKUPLD | tr -d '\r' | while read line;
do
device_name=`echo $line | cut -d "," -f 1`
quantity_num=`echo $line | cut -d "," -f 2`
bash $SCRIPT $device_name $quantity_num
done
如果您需要其他信息,请告诉我。
答案 0 :(得分:0)
下面是一个进度条脚本,它将一直运行到进度条被填满为止。
您将要更改最外面的while循环的条件,以检查$ BLKUPLD是否已完成,并将其余代码移至指定的while循环内(本质上,您可能需要将MAX_ITERATIONS更改为布尔值)条件,并尝试在此支架中将代码的组件插入哪里。
理想情况下,您会知道还剩下多少数据,并可以在输入循环逻辑时相应地动态设置MAX_ITERATIONS;但是,您提到过您也可以拥有无限循环的进度条,这可能是您无法预先定义脚本终点的必经之路。
此脚本背后与我链接的其他线程不同的主要前提是,没有硬编码的进度点:例如“ [[### __________] 33%” 。相反,嵌套的while循环用于动态设置主题标签的数量,并动态填充主题标签后的间距以保持进度的一致性。
#!/bin/sh
MAX_ITERATIONS=10
WHILE_ITERATOR=0
while [ $WHILE_ITERATOR -le $MAX_ITERATIONS ]
# __Add call to process checking script here.__
do
# Appending hashtags to progress bar string.
PROGRESS_BAR="["
HASHTAGS=$WHILE_ITERATOR
HASHTAGS_ITERATOR=0
while [ $HASHTAGS_ITERATOR -le $HASHTAGS ]
do
# Accounting for first pass through outer loop.
if [ $WHILE_ITERATOR -eq 0 ]; then
PROGRESS_BAR+=" #"
else
PROGRESS_BAR+="#"
fi
HASHTAGS_ITERATOR=$((HASHTAGS_ITERATOR+1))
done
# Appending trailing spaces to progress bar string.
SPACES=$((MAX_ITERATIONS-WHILE_ITERATOR-1))
SPACES_ITERATOR=0
while [ $SPACES_ITERATOR -le $SPACES ]
do
PROGRESS_BAR+=" "
SPACES_ITERATOR=$((SPACES_ITERATOR+1))
done
# Closing progress bar screen and adding return esc char.
PROGRESS_BAR+="]\r"
# Setting echo -n to run properly on Unix & Mac
if [ "`echo -n`" = "-n" ]; then
n=""
c="\c"
else
n="-n"
c=""
fi
# Print the progress bar without \n; reprints in place.
echo $n "$PROGRESS_BAR" $c
sleep 1
WHILE_ITERATOR=$((WHILE_ITERATOR+1))
done
# Print final iteration of progress bar string.
echo "$PROGRESS_BAR"