在 bash列表中创建进度条以获取进度条的方法,因此我将在这里集中讨论如何伪造部分。我将在这里使用 2 秒而不是 60 秒来进行测试,sleep根据您的确切需求调整值。
dialog,whiptail或zenity(GUI)for i in {1..100}; do sleep 2; echo $i; done | dialog --gauge 'Running...' 6 60 0
Run Code Online (Sandbox Code Playgroud)
这个for循环在数字 1 到 100 上循环1并且echo每秒循环一次2,然后输出通过管道传输到dialog,它在进度条上显示数字作为进度。这种方法也适用于whiptail和zenity --progress(GUI)。dialog的输出看起来像这样,在文本模式下使用 'curses' 带有彩色进度条:
pvfor i in {1..100}; do sleep 2; echo; done | pv -pWs100 >/dev/null
Run Code Online (Sandbox Code Playgroud)
这个循环非常相似,只是它每秒钟只打印一个换行符(=1 个字节的数据)2,pv然后被告知期望精确100的数据字节并显示一个p进度条。在宽度为 80 个字符的终端窗口中,输出如下所示:
[===============> ] 22%
Run Code Online (Sandbox Code Playgroud)
通过一个简单的循环,您还可以构建自己的进度条。以下是一些示例,它们#在一行中打印 100 ,每 2 秒打印一个:
# 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% #######################################
Run Code Online (Sandbox Code Playgroud)
1看,多胞胎!