whiptail
预先安装在Ubuntu和许多其他发行版中,并将显示全屏(但仍基于终端)进度元素。
dialog
是的超集whiptail
,因此此示例对两者都适用。它确实提供了更高级的UI元素,因此,如果您正在寻找诸如文件选择器和表单之类的用户交互功能,它可能会派上用场,但是它的缺点是没有预先安装在许多系统上。


for i in $(seq 1 100)
do
sleep 0.1
echo $i
done | whiptail --title 'Test script' --gauge 'Running...' 6 60 0
请注意,脚本输出解释为百分比,因此您可能必须相应地调整输出。
Whiptail和Dialog还允许您在运行时通过相当隐秘的语法来修改文本:
phases=(
'Locating Jebediah Kerman...'
'Motivating Kerbals...'
'Treating Kessler Syndrome...'
'Recruiting Kerbals...'
)
for i in $(seq 1 100); do
sleep 0.1
if [ $i -eq 100 ]; then
echo -e "XXX\n100\nDone!\nXXX"
elif [ $(($i % 25)) -eq 0 ]; then
let "phase = $i / 25"
echo -e "XXX\n$i\n${phases[phase]}\nXXX"
else
echo $i
fi
done | whiptail --title 'Kerbal Space Program' --gauge "${phases[0]}" 6 60 0
pv
显示通过文件传递的文件或流的进度。但是,它不能(轻松地?)用于显示自定义操作(例如循环)的进度。专为流而设计。
$ head -c 1G < /dev/urandom | pv -s 1G > /dev/null
277MB 0:00:16 [17.4MB/s] [========> ] 27% ETA 0:00:43
方便使用的一些实际示例pv
:
# progress while importing a DB dump
pv mybigfile.sql | mysql -uroot -p dbname
# importing straight from a remote server
ssh user@server 'cat mybigfile.sql.gz' | pv | gzip -cd | mysql -uroot -p dbname
# taking a snapshot of a btrfs partition
btrfs send /snapshots/$date | pv | btrfs receive /mnt/backup/root
我不知道任何以pv
或样式提供单行进度条的命令wget
,但是有很多简单的Bash / Perl / sed脚本可以添加该功能,其他人在这里也分享过。