首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在shell脚本中添加进度条?

如何在shell脚本中添加进度条?
EN

Stack Overflow用户
提问于 2008-10-26 22:32:06
回答 28查看 413.1K关注 0票数 482

当在bash或*NIX中的任何其他shell中编写脚本时,当运行一个需要几秒钟的命令时,需要一个进度条。

例如,复制一个大文件,打开一个大tar文件。

您推荐用什么方法将进度条添加到shell脚本中?

EN

回答 28

Stack Overflow用户

发布于 2015-01-20 20:05:57

前几天我写了一个简单的进度条函数:

代码语言:javascript
复制
#!/bin/bash
# 1. Create ProgressBar function
# 1.1 Input is currentState($1) and totalState($2)
function ProgressBar {
# Process data
    let _progress=(${1}*100/${2}*100)/100
    let _done=(${_progress}*4)/10
    let _left=40-$_done
# Build progressbar string lengths
    _fill=$(printf "%${_done}s")
    _empty=$(printf "%${_left}s")

# 1.2 Build progressbar strings and print the ProgressBar line
# 1.2.1 Output example:                           
# 1.2.1.1 Progress : [########################################] 100%
printf "\rProgress : [${_fill// /#}${_empty// /-}] ${_progress}%%"

}

# Variables
_start=1

# This accounts as the "totalState" variable for the ProgressBar function
_end=100

# Proof of concept
for number in $(seq ${_start} ${_end})
do
    sleep 0.1
    ProgressBar ${number} ${_end}
done
printf '\nFinished!\n'

或者从哪里抢走它,

https://github.com/fearside/ProgressBar/

票数 63
EN

Stack Overflow用户

发布于 2011-07-29 01:35:46

使用Linux命令pv

如果它在流水线中间,它不知道它的大小,但它给出了一个速度和总数,从那里你可以计算出它应该花多长时间并获得反馈,这样你就知道它没有挂起。

票数 50
EN

Stack Overflow用户

发布于 2008-10-26 15:18:26

一些帖子已经展示了如何显示命令的进度。为了计算它,你需要看看你已经进步了多少。在BSD系统上,一些命令,如dd(1),接受SIGINFO信号,并将报告它们的进度。在Linux系统上,一些命令会以类似的方式响应SIGUSR1。如果此工具可用,您可以通过dd传输您的输入,以监视处理的字节数。

或者,您可以使用lsof来获取文件的读指针的偏移量,从而计算进度。我已经编写了一个名为pmonitor的命令,用于显示处理指定进程或文件的进度。使用它,您可以执行以下操作。

代码语言:javascript
复制
$ pmonitor -c gzip
/home/dds/data/mysql-2015-04-01.sql.gz 58.06%

早期版本的Linux和Unix外壳脚本出现在my blog上(“监视FreeBSD上的进程进度”)。

票数 49
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/238073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档