我正在编写一个外壳(zsh)脚本,该脚本使用dialog(1)
绘制精美的文本UI。
在某个地方我需要等待以下情况之一发生:
超时+轮询组合很容易;但是,dialog(1)
我什么都做不了。
我可以显示一个在等待超时或外部事件发生时递增的量规,但量规对话框没有控件,没有中止按钮。
或者我可以显示一个带有倒计时和一个取消按钮的暂停对话框(使用--nook
时没有确定按钮),但是如果我这样启动对话框,它将一直运行直到超时结束或直到用户按下取消键,即使同时发生外部事件也是如此。
我可以在后台启动dialog --pause
,这样我就可以继续轮询外部事件,并在事件发生时杀死dialog
,但是很难抓住{{ 1}}退出。
一种解决方法是将dialog
作为dialog
的协同进程开始,并继续检查该协同进程是否仍然存在,但这不起作用,因为如果协同进程试图暂停,则该协同进程将被挂起写给tty。 (实际上,在后台运行coproc
时也会出现问题。)
作为一种可能的错误,我可能会继续显示一些dialog
小部件,且其循环超时为一秒,但是也许有更好的方法吗?
答案 0 :(得分:0)
一个笨拙的解决方案看起来像这样:
dialog