whiptail
ติดตั้งมาพร้อมกับ Ubuntu และ distros อื่น ๆ มากมายและจะแสดงองค์ประกอบความคืบหน้าแบบเต็มหน้าจอ (แต่ยังคงใช้เทอร์มินัล)
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 จำนวนมากที่จะเพิ่มฟังก์ชันการทำงานดังที่คนอื่น ๆ ได้แบ่งปันไว้ที่นี่