网站首页 > 基础教程 正文
日常工作中经常遇到需要后台执行一个任务,然后shell脚本需要展示一个旋转条表示任务正在执行,今天要讨论的就是这个旋转条如何在shell中实现?废话不多说先上代码如下:
每次循环迭代时,它会显示 sp 字符串中的下一个字符,并在到达末尾时循环回来(i 是当前要显示的字符的位置,${#sp} 是 sp 字符串的长度)。
\b 字符串会被替换为一个“退格”字符。或者,你可以使用 \r 回到行的开头。
为了减慢速度,sleep 命令被包含在循环中(在 printf 之后)。
在 POSIX 中的等效方法是:
在脚本中使用这些旋转器的一种方法是将它们作为后台进程运行,并在完成后终止它们。例如:
如果你已经有一个执行大量工作的循环,你可以编写一个函数,每次迭代时“推进”旋转器一步,并在每次迭代开始时调用它:
在Bash中,旋转器是一种常用的技术,用于在命令行界面中显示一个旋转的图标或字符,以表示正在进行某个任务。它可以增加用户体验,提供一种视觉上的反馈,告知用户程序正在运行。
旋转器的原理是通过在循环中不断更新输出来创建旋转的效果。通常使用一组预定义的字符或图标,按顺序显示它们,并在到达末尾时重新开始。这样就形成了一个旋转的动画效果。
在上面的示例中,我们定义了两个不同的旋转器函数:spin() 和 endspin()。
spin() 函数使用了一个字符集合 `sp`,其中包含了用于旋转动画的字符或图标。通过在循环中不断更新输出的方式,它会将字符集合中的下一个字符显示出来,并在到达末尾时重新开始。这样就形成了一个旋转的效果。
`endspin()` 函数用于结束旋转器并输出最终的消息。它会将光标移动到行的开头(使用 `\r` 或者 `\b`),然后输出最终的消息,最后换行。
在脚本中使用旋转器的一种常见方式是将它作为后台进程运行,并在任务完成后终止它。这样可以确保旋转器在任务执行期间一直显示,而不会被任务的输出覆盖。
另一种方式是在一个长时间运行的循环中使用旋转器。在每次循环迭代开始时调用旋转器函数,然后执行一些工作,直到任务完成。这样可以在任务执行期间显示旋转器,并提供一种视觉上的反馈。
类似的技术也可以用于构建进度条。通过在循环中更新进度条的长度或填充字符,可以实现动态的进度显示效果。
总而言之,旋转器是一种简单而有效的技术,可以在Bash中创建动画效果,提供任务执行的视觉反馈,增强用户体验。它在命令行界面的脚本和工具中广泛使用。
如果您觉得文章内容对你有一点帮助可以关注我,我在头条平台会持续分享更多实用的shell技巧和最佳实践,如果想系统的快速学习shell的各种高阶用法和生产环境避坑指南可以看看《shell脚本编程最佳实践》专栏,专栏里有更多的实用小技巧和脚本代码分享。
猜你喜欢
- 2024-10-12 这个为生信学习打造的开源Bash教程真香!!(目录更新)
- 2024-10-12 Shell 函数(杰哥教你Linux) shell中函数
- 2024-10-12 Linux下程序是怎样执行的 linux怎么执行程序
- 2024-10-12 这几个常用 alias,带你高效做事(下)
- 2024-10-12 Shell脚本:函数语法以及实例讲解 shell脚本入门详解
- 2024-10-12 Linux 之 bash 编程 linux bash-4.1
- 2024-10-12 Bash函数:ucase、lcase:借助perl一键转换字符串为大小或小写
- 2024-10-12 Bash Shell制作菜单3部曲:1简单交互菜单|Linux|运维|嵌入式
- 2024-10-12 Bash脚本中的用户交互:暂停、等待按键和倒计时的实现方法
- 2024-10-12 bash问题:是否有函数可以返回字符串的长度?
- 最近发表
- 标签列表
-
- 菜鸟教程 (58)
- jsp (69)
- c++教程 (58)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- pythonif (68)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)