如何将值发送到Zenity进度条

use*_*428 7 linux shell zenity progress-bar

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

fgrep用来找出一个新文件被压缩的时间("压缩"是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
Run Code Online (Sandbox Code Playgroud)

运行此操作会使进度条显示,从0开始,但不显示任何进度:操作完成后,条形图突然跳到结尾.

我用谷歌搜索了一段时间,但我发现的唯一的事情zenity progress似乎是有一些问题:D任何帮助都将受到高度赞赏!

小智 5

看起来你没有在输出中获得命令的进度,通过运行没有| 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"'
Run Code Online (Sandbox Code Playgroud)

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

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