前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在shell脚本中添加进度条

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

作者头像
程序熵
发布2024-02-27 13:05:43
2080
发布2024-02-27 13:05:43
举报
文章被收录于专栏:技术汇技术汇

问:

在 *NIX 系统的 Bash 或其他 shell 脚本中,当运行的命令需要耗费几秒钟以上的时间时,需要一个进度条。

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

你建议用什么方法在 shell 脚本中添加进度条?

答:

根据题主所问,我推荐以下几种方式:

1. pv 命令:pv 是 "pipe viewer" 的缩写,可以监视通过管道传输数据的进度。如果要传输/压缩/解压缩大文件,可以使用 pv 来显示进度条。例如:

代码语言:javascript
复制
pv -pbt bigfile | nc -nv somewhere.com 5000

pv file.tar | gzip > file.tar.gz

使用 nc 命令测试传输文件的截图:

2. rsync 命令:如果你正在同步文件,rsync 提供了内置的进度展示功能,可以使用 --progress 选项来显示文件的同步进度。例如:

3. 自定义进度条:在某些情况下,你可能需要直接在脚本中编写代码来显示进度条。这通常涉及到在循环中使用 printf 命令来输出进度条,然后用 carriage return (\r) 来覆盖同一行的内容,从而创建进度条的动态效果。例如以下示例代码:

代码语言:javascript
复制
#! /bin/bash

total_steps=100

for ((step=1; step<=total_steps; step++)); do
    printf "\rProgress: [%-50s] %d%%" $(printf "#%.0s" $(seq 1 $((step*50/total_steps)))) "$((step*100/total_steps))"
    sleep 0.1 # 模拟操作延迟
done
printf "\n"

参考文档:

  • stackoverflow question 238073
  • man pv
  • man rsync
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序熵 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档