我在bash脚本中显示命令进度。命令输出被传送到zenity --progress并且最终可以运行很长时间。我想放弃它(杀死命令),如果我取消zenity对话框:在使用zenity的bash脚本中 - 进度条从管道读取,如何安全地杀死管道进程?
(echo 0; command; echo 100) | if ! zenity --progress
then DO_SOMETHING_TO_KILL_command
fi
所有的解决方案,我发现之一:
一般杀“命令”和p纤ep,的pidof,pkill的,killall等。这不是我想要的,因为可能有很多这样的“命令”在运行。
创建一个fifo来输出“命令”的PID(命令& echo $!> some_fifo;等待),然后在管道后面读取它。
解决方案2.我想要做什么,但在一个过于复杂的方式(例如参照的例子here(法语))。如果可能,我想避免fifos或临时文件。看起来好像它最多可以通过输出重定向到一个文件描述符来完成,但我无法确切知道如何。
注:用于与重定向例如全组命令替换,$((...命令&回波> & 3 ... | zenity --progress)3> & 1) - 这是一个通用soution在这种类型的情况 - 在这里不起作用,因为$(...)一直等到整个子shell完成。
'echo 0'只在我们运行'zenity --progress --pulsate'的情况下才需要;当'命令'不输出数字时,通常这样看起来更好。 – oriol 2013-03-07 08:56:15