gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:25:51 24 4
gpt4 key购买 nike

我编写了一个使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com