迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 >

在 Bash 中创建进度条

作者:迹忆客 最近更新:2023/05/03 浏览次数:

进度条是显示任务进度的视觉指示器,例如长时间运行的脚本或命令。 它可以用于向用户提供有关任务状态的反馈,还可以帮助估计任务完成之前的剩余时间。

本文将探讨在 Bash(Linux 和 macOS 的默认 shell)中向 shell 脚本添加进度条的几种方法。


使用 pv 命令在 Bash 中创建进度条

向 shell 脚本添加进度条的最简单方法之一是使用 pv 命令,它代表管道查看器。 此命令允许监视通过管道传递的数据的进度,可用于在终端中显示进度条。

例如,要向将大文件从一个位置复制到另一个位置的脚本添加进度条,可以使用以下命令:

cat file.txt | pv -s $(stat -c%s file.txt) > /destination/file.txt

此命令使用 cat 读取 file.txt 文件的内容并将输出通过管道传递给 pv 命令。 pv 命令使用 -s 选项以字节为单位指定输入数据大小,并根据此值计算进度。

pv 命令的输出随后被重定向到目标文件。

当脚本运行时,pv 命令将在终端中显示一个进度条,显示复制文件的百分比以及任务完成前的估计剩余时间。 进度条会随着数据的传输而动态更新,并在任务完成时消失。


使用对话框命令在 Bash 中创建进度条

将进度条添加到 shell 脚本的另一种方法是使用 dialog 命令,这是一种在终端中创建用户友好界面的实用程序。 对话框命令可以显示各种小部件,包括进度条,并且可以通过脚本控制它以显示任务的当前进度。

要使用 dialog 命令向 shell 脚本添加进度条,您可以使用 --gauge 选项创建一个新的进度条小部件。 --gauge 选项有几个参数,包括小部件的标题、小部件的高度和宽度以及进度条的初始值。

以下是如何使用 --gauge 选项创建标题为正在复制文件且初始值为 0 的进度条的示例:

dialog --gauge "Copying file" 10 70 0

此命令将创建一个高度为 10 行、宽度为 70 个字符的进度条小部件,并将在小部件顶部显示标题正在复制文件。 进度条最初为空,值为 0。

要更新任务的进度和进度条的值,可以使用 --title 选项设置小部件的标题,使用 --gauge-data 选项设置进度条的当前值。 例如,要更新进度条以显示完成 50%,您可以使用以下命令:

dialog --title "Copying file" --gauge-data 50

此命令会将小部件的标题更新为正在复制文件,并将进度条的值更新为 50。进度条将使用新值重新绘制,用户将在终端中看到更新后的任务进度。

要在 shell 脚本中使用对话命令,您可以使用 --and-widget 选项指定应按顺序执行的小部件命令列表。 这允许您在脚本中创建和更新进度条,并将确保以正确的顺序绘制和更新小部件。

以下是使用 dialog 命令创建和更新进度条的 shell 脚本示例:

#!/bin/bash

# Create the progress bar widget
dialog --gauge "Copying file" 10 70 0

使用 ncurses 库在 Bash 中创建进度条

将进度条添加到 shell 脚本的另一种方法是使用 ncurses 库,这是一个用于在终端中创建用户友好界面的编程库。 ncurses 库提供了许多用于创建交互式菜单、表单和其他图形用户界面的函数和小部件,它可用于在 shell 脚本中创建自定义进度条。

要使用ncurses 库在shell 脚本中添加进度条,可以使用initscr 函数初始化屏幕,使用newwin 函数为进度条创建一个新窗口。 newwin 函数有几个参数,包括窗口的高度和宽度以及窗口在屏幕上的初始位置。

下面举例说明如何使用newwin函数在屏幕上的(5,5)位置创建一个高度为10行、宽度为70个字符的进度条窗口:

#!/bin/bash

# Initialize the screen
initscr

# Create the progress bar window
win=`newwin 10 70 5 5`

此代码将初始化屏幕并为进度条创建一个新窗口。 win 变量将引用窗口,该窗口可用于访问和更新脚本中的进度条。

绘制进度条的初始状态,可以使用box函数在窗口周围画一个框,mvwaddstr 函数在框内写上进度条的标题和0%的初始值。

以下是如何使用这些函数绘制进度条初始状态的示例:

# Draw the box around the window
box $win 0 0

# Write the title and initial value of the progress bar
mvwaddstr $win 1 1 "Copying file"
mvwaddstr $win 1 30 "0%"

要更新任务的进度和进度条的值,可以再次使用 mvwaddstr 函数将进度条的新值写入框内。 例如,要更新进度条以显示完成 50%,您可以使用以下代码:

# Update the value of the progress bar
mvwaddstr $win 1 30 "50%"

此代码将用新值 50% 覆盖进度条的现有值。 进度条将使用新值重新绘制,用户将在终端中看到更新后的任务进度。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 CentOS 中获取 IP 地址

发布时间:2023/05/04 浏览次数:108 分类:操作系统

这篇简短的文章是对 CentOS 的一个简短介绍,然后简要讨论了我们如何使用命令行界面 (CLI) 在 CentOS 中获取服务器 IP 地址。

在 Linux 中更新 YUM

发布时间:2023/05/04 浏览次数:82 分类:操作系统

本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。

在 Linux 中安装 Deb 文件

发布时间:2023/05/04 浏览次数:130 分类:操作系统

本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。

Linux 中的 lsof 命令

发布时间:2023/05/04 浏览次数:82 分类:操作系统

在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。

Linux 中的 ps aux 命令

发布时间:2023/05/04 浏览次数:69 分类:操作系统

本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。

Linux 中的 NTP

发布时间:2023/05/04 浏览次数:137 分类:操作系统

本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。

在 Bash 中将 Stderr 和 Stdout 重定向到一个文件

发布时间:2023/05/04 浏览次数:130 分类:操作系统

本文介绍了如何在 Bash 中重定向 stderr 和 stdout。让我们开始了解 Linux 中的标准输出和标准错误这两个术语。Linux 中的标准输出和标准错误 在 Linux 中,命令从用户那里获取一些输入,可以是文件

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便