如何创建一个虚假的进程条?

如何创建一个虚假的进程条?

我希望终端显示某种基于时间的进程条,例如每 60 秒显示 1%。

答案1

在 bash 中创建进度条列出了获取进度条的方法,所以我将集中讨论如何伪造部分。我将使用 2 秒而不是您这里的 60 秒,仅用于测试,请sleep根据您的确切需求调整该值。

使用dialogwhiptailzenity(GUI)

for i in {1..100}; do sleep 2; echo $i; done | dialog --gauge 'Running...' 6 60 0

for循环每秒循环1 次,遍历 1 到 100 的数字,然后将输出通过管道传输到,后者将数字显示为进度条上的进度。此方法也适用于和(GUI)。的输出如下所示,在文本模式下使用“curses”显示彩色进度条:echo2dialogwhiptailzenity --progressdialog

对话框进度条

使用pv

for i in {1..100}; do sleep 2; echo; done | pv -pWs100 >/dev/null

这个循环非常相似,只是它每秒只打印一个换行符(=1 字节数据)2pv然后被告知需要精确的100字节数据并显示p进度条。在宽度为 80 个字符的终端窗口中,输出如下所示:

[===============>                                                          ] 22%

构建你自己的进度条

使用简单的循环,您还可以构建自己的进度条。以下是一些示例,#每 2 秒打印一行,每次打印 100:

# number signs only
$ for i in {1..100}; do sleep 2; echo -n \#; done; echo
####################################################################################################

# with progress in % on the right
$ for i in {1..100}; do sleep 2; printf "%0.s#" $(seq 1 $i); printf "%0.s " $(seq $i 100); printf "%3d%%\r" "$i"; done; echo
######################################################                                                54%

# with progress in % on the left
$ for i in {1..100}; do sleep 2; printf "%3d%% " "$i"; printf "%0.s#" $(seq 1 $i); printf "%0.s " $(seq $i 100); printf "\r"; done; echo
 39% ####################################### 

1看,一个多肉植物

答案2

假进度条

此进度条使用/bin每个人都有的目录中的真实数据。脚本可以“简化”以满足您的虚假需求。或者可以将其扩展为实际应用程序:

yad-进度条.gif

它使用的是终端中默认 GUIyad的增强版本。要安装,请使用:zenityyad

sudo apt install yad

代码如下:

#!/bin/bash

# NAME: yad-progress-bar
# PATH: /mnt/e/bin
# DESC: Display yad progress bar % with names.
# DATE: Apr 23, 2018.  Modified Oct 18, 2019.

Source="/bin"
Title="Processing files for: $Source"
Count=0  
AllFiles=$(ls $Source/* | wc -l)

for f in "$Source"/* ; do

    echo "#$f"              # Display file name in progress bar.
    Count=$(( $Count + 1 ))
    Percent=$(( Count * 100 / AllFiles ))
    echo $Percent           # Display percent complete in progress bar.
    sleep .025

done | yad --progress       --auto-close \
    --width=500             --height=300 \
    --title="$Title"        --enable-log "Current filename" \
    --log-expanded          --log-height=250 \
    --log-on-top            --percentage=0 \
    --no-cancel             --center

答案3

采纳@wjandream 的评论并仅使用 for i in {1..100},第三个选项简化为:

for ((i=0; i<=100; i++)); { echo "$i"; echo "# 正在下载 $i%";sleep 0.2; } | yad --progress --title="正在下载..." --height=90 --width=400 --center --text="请等待..." --auto-close --no-buttons --no-escape

相关内容