Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何通过管道将终端命令输出到Zenity进度对话框文本?_Linux_Bash_Zenity - Fatal编程技术网

Linux 如何通过管道将终端命令输出到Zenity进度对话框文本?

Linux 如何通过管道将终端命令输出到Zenity进度对话框文本?,linux,bash,zenity,Linux,Bash,Zenity,我有一个简单的应用程序,带有一些bash命令,例如apt update,我想通过管道将其输出到zenity Progress对话框中的--text参数,我在谷歌搜索后尝试了一些选项,如: gksudo apt update | xargs -L1 -I % zenity --progress --text=% --percentage=0 --auto-close --auto-kill 但我得到的只是闪烁的窗户 那么,如何使输出以进度百分比显示在zenity窗口中?您不能使输出以进度百分比

我有一个简单的应用程序,带有一些bash命令,例如
apt update
,我想通过管道将其输出到zenity Progress对话框中的
--text
参数,我在谷歌搜索后尝试了一些选项,如:

gksudo apt update | xargs -L1 -I % zenity --progress --text=% --percentage=0 --auto-close --auto-kill 
但我得到的只是闪烁的窗户

那么,如何使输出以进度百分比显示在zenity窗口中?

您不能使输出以进度百分比显示在zenity窗口中,因为百分比计算需要100%的信息,在这里,
apt update
命令将生成多少输出是未知的

您可以做的是在
apt update
输出内容时设置一个动画进度条。由于管道的标准输出通常是完全缓冲的,因此必须使用stdbuf更改缓冲:

gksudo stdbuf -oL apt update | zenity --progress --pulsate --auto-close --auto-kill

理论上,您可以通过检查到目前为止有多少来自
apt cache policy
的URL被检查,从
apt update
的输出计算当前进度。但是,只有在命令完成后才能显示apt update的输出(此处缺少),因此进度条中没有点。