我捕获了使用 tput 在屏幕上绘制某些内容的脚本的输出。当我执行 cat myoutput 时,一切都很清楚(看起来终端从头开始重新解释它),但是当我编辑或管道输出时,我看到大量的 ansi 序列以及破坏性打印之前的所有内容,例如 tput clear 等。
我怎样才能对其进行后处理,以便我只得到最终的“渲染”?
更好的是,其根源是我目前正在编写我的脚本,因此它将除了终端之外的所有内容都打印到文件中
和exec > >(tee /dev/tty)
有没有办法告诉标准输出通道在保存之前“渲染”所有内容?
您想要的是一个能够理解这些终端控制序列并能够呈现最终视图的程序。那么,这样的程序称为终端仿真器。其中一些是图形化的——比如您启动使用 shell 的程序,例如 gnome-terminal 或 alacritty,其他的主要是无头的。
较古老的
screen
或更现代的tmux
都是这里的相关内容。tmux
在后台启动您的“内部”脚本(即输出内容的脚本)tmux
输出屏幕截图把它放在一起,就像
您只需要将写入的内容添加到 fifo 中
inner-script.sh
,例如echo done > "${FIFO}"; sleep 100
.如果您已经有“记录”输出,您
inner-script.sh
可能只是cat recording.txt; echo done > "${FIFO}"; sleep 100