我的程序的一部分dialog
涉及在文件上运行 unsquashfs 以将其提取到目录。我正在尝试为此操作制作一个进度条,以使用该选项显示其进度--gauge
。我尝试过的是这样的:
unsquashfs -f -q -d extract_directory filesystem.squashfs | dialog --title "Progress" --gauge "Unsquashing filesystem..." 7 60
我还尝试过使用其他选项(如-i
和 )进行 unsquashfs -n
,但它们似乎都不起作用。进度条确实显示,但始终停留在 0%。有可能让它发挥作用吗?如果需要的话,我不介意使用一些古怪的解决方法。
答案1
这不会那么容易:dialog --gauge
期望来自标准输入的百分比,每行一个数字。
但是,unsquashfs
没有那样的输出!它可能使用控制台控制字符来更新其进度条(至少它不链接到 libncurses)。
重要的部分是progressbar.c
squashfs-tools源代码中的第145行:
printf("\r[");
…
printf(" %3d%%", percentage);
控制字符\r
跳转到当前行的开头,然后进度条覆盖该行,最后打印百分比。
所以你会大概需要类似的东西
unsquashfs linux.squash | tr $'\r' $'\n' | sed -ne 's/^.* \([[:digit:]]*\)\%$/\1/p' | dialog --gauge
但我怀疑它会起作用。最有可能的是,会有缓冲,并且所有百分比都会立即显示(尝试不使用| dialog --gauge
)。
老实说,unsquashfs 的进度条确实有效。简单地显示而不是显示相同的对话框?
除此之外,还有一些东西可以解压缩squashfs,我想你可以使用它们来构建你自己的程序来输出百分比而不是其他任何东西。或者,您可以将命令行开关添加到mksquashfs
和unsquashfs
的源代码中并让它们执行此操作 - 可能是这里最简单的解决方案。