小编pih*_*agy的帖子

带有命令输出的 Bash 控制台进度对话框

我已经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 dialog

5
推荐指数
1
解决办法
7487
查看次数

陷入 bash 陷阱(RETURN 陷阱)

我正在寻找一种惯用的模式来使用陷阱作为“确保”或“最终”的含义,因此无论 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)

还有一个警告:为了避免重复处理,必须以某种方式管理清算功能已经完成。

bash trap

5
推荐指数
1
解决办法
1496
查看次数

标签 统计

bash ×2

dialog ×1

trap ×1