linux - 如何将值发送到 Zenity 进度条

标签 linux shell progress-bar zenity

我编写了一个使用 7zip 备份目录的简单脚本。一切正常,但现在我想给它添加一些图形反馈,添加一个进度条。我知道我可以使用 zenity 来做到这一点,但是无论我尝试什么,我似乎都无法让它发挥作用。

我正在使用 fgrep 来查明新文件何时被压缩(“Compressing”是 7zip 在屏幕上打印的每一行的第一个词)以增加压缩率。具体的代码行如下:

7z a -t7z /home/user/Desktop/Backup.7z /home/user/Desktop/folder_to_backup -mx9 | fgrep Compressing | nl | awk '{print $1/$number_of_files*100}' | zenity --progress --percentage=0 --auto-close

运行这个会出现进度条,从0开始,但是没有进度显示:操作完成后,进度条突然跳到最后。

我已经用谷歌搜索了一段时间,但我唯一发现的是 zenity progress 似乎有一些问题 :D 非常感谢任何帮助!

最佳答案

看起来您没有在输出中获得命令的进度,通过运行不带 | 的命令来检查它zenity --progress --percentage=0 --auto-close 管道。

尝试这样的事情来获得你的输出,首先你需要 apt-get install screen 如果你没有安装它:

screen -L bash -c '(while :; do tail ~/screenlog.0 | grep -o "[0-9]*%" | tail -1; done | zenity --progress --auto-close &); 7z a "output.zip" "/path/to/input"'

我将分解命令中最重要的部分:

  1. screen -L 这个标志告诉 screen 命令开始一个新 session 并将所有终端输出记录到一个文件 ~/screenlog.0默认。
  2. bash -c COMMAND1 生成一个子 shell 并在其中运行 COMMAND1
  3. (COMMAND2 &) 生成另一个将在后台启动 COMMAND2 的子 shell。
  4. while :; 开始无限循环。
  5. tail FILE 读取 FILE 的最后 10 行。
  6. grep -o 仅打印匹配行的匹配(非空)部分。
  7. [0-9]*% 后跟 % 符号的任何数字系列。
  8. tail -1 读取上一个管道命令的最后一行。

关于linux - 如何将值发送到 Zenity 进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13994843/

相关文章:

linux - 将一个命令的输出重定向到多个命令

python - 使用python通过文件设置环境变量

bash - 使用终端(或 Shell)将文件的一部分复制/粘贴到另一个文件中

c++ - 在netbeans IDE中隐藏工具栏上的进程进度条?

linux - 制作图形的可视化表示

linux - 在 linux 中只获取文件名(不包括路径名)和记录数

scala - Spark shell 命令行

javascript - 谁能破解这个进度条吗?

android - 在另一个类的 ProgressBar 上设置进度

linux - 我可以在 centos 64 位中降级 gcc 吗?