我已经dialog
安装了,我想要一个不错的进度对话框,如下所示:
+-------[ title ]--------+
| |
| +-[ console output ]-+ |
| | output line11 ^ |
| | output line12 | |
| | output line13 | |
| | output line14 # |
| | output line15 | |
| | output line16 v |
| +--------------------+ |
| #########80%#####::::: |
+------------------------+
Run Code Online (Sandbox Code Playgroud)
因此,例如,当在发行版中升级 5 个软件包时,它会显示进度(此处,4 个软件包升级了 5 个,即 80%),但会显示执行命令的详细输出。这可能吗?
我怀疑是这样,但我无法通过--tailboxbg
和获得有效的解决方案--gauge
。
我正在寻找一种惯用的模式来使用陷阱作为“确保”或“最终”的含义,因此无论 bash 函数如何退出,它们都应该执行。
我已经找到了RETURN
陷阱,但嵌套并不是小事。我猜想 bar 内的陷阱会遮蔽 foo 中的陷阱。foo
我怎样才能为两者设置陷阱bar
因此,鉴于以下代码,我希望在退出foo
和退出时进行清理bar
。
我的第一次尝试是使用一个全局字符串来存储清理任务,但是只要有子 shell,该字符串就会中断。从以下代码的输出看来,RETURN 信号也是“shell-global”
fooclear() { echo fooclear; }
barclear() { echo barclear; }
bar() {
echo bar
trap barclear RETURN INT ERR TERM EXIT
sleep 1
}
foo() {
echo foo
sleep 1
trap fooclear RETURN INT ERR TERM EXIT
bar
}
for i in 1 2 3; do
foo &
done
wait
Run Code Online (Sandbox Code Playgroud)
还有一个警告:为了避免重复处理,必须以某种方式管理清算功能已经完成。