相关疑难解决方法(0)

在 shell 脚本中超时

我有一个shell脚本,多数民众赞成从标准输入读取。在极少数情况下,没有人准备好提供输入,脚本必须超时。在超时的情况下,脚本必须执行一些清理代码。这样做的最佳方法是什么?

这个脚本必须非常便携,包括到 20 世纪没有 C 编译器的 unix 系统和运行 busybox 的嵌入式设备,所以不能依赖 Perl、bash、任何编译语言,甚至完整的 POSIX.2。特别是$PPIDread -t完全符合POSIX标准的和陷阱不可用。写入临时文件也不包括在内;即使所有文件系统都以只读方式安装,脚本也可能运行。

只是为了让事情变得更困难,我还希望脚本在没有超时时能够相当。特别是我也在Windows(主要是Cygwin)中使用了脚本,其中fork和exec特别低,所以我想尽量减少它们的使用。

简而言之,我有

trap cleanup 1 2 3 15
foo=`cat`
Run Code Online (Sandbox Code Playgroud)

我想添加一个超时。我不能catread内置替换。在超时的情况下,我想执行该cleanup功能。


背景:该脚本通过打印一些 8 位字符并比较前后光标位置来猜测终端的编码。脚本的开头测试 stdout 连接到支持的终端,但有时环境是谎言(例如,即使使用 调用它也会plink设置TERM=xtermTERM=dumb)。脚本的相关部分如下所示:

text='Éé'  # UTF-8; shows up as Ãé on a latin1 terminal
csi='?['; dsr_cpr="${csi}6n"; dsr_ok="${csi}5n"  # ? is an escape character
stty_save=`stty -g`
cleanup () { …
Run Code Online (Sandbox Code Playgroud)

shell signals timeout

56
推荐指数
3
解决办法
2万
查看次数

为什么 showconsolefont 在 tmux 中有不同的输出?

我正在运行一个没有窗口管理器或桌面环境的 arch Linux 系统(现在)。当我需要多个终端时,我使用 tmux。当我在 tty 上运行sudo showconsolefont(没有 tmux)时,我看到了预期的符号集,但是当我打开 tmux 并运行时sudo showconsolefont,我看到了一组重复的不同符号。

我的字体是ter-124b,来自 Terminus 系列。

在屏幕截图中,顶部输出是从 tmux 中捕获的,看起来与我运行时的显示方式相同sudo showconsolefont。底部输出包含不同的符号,但如果我将其重定向到一个文件,然后再重定向到cat该文件,它们看起来是相同的。diff分析它们还报告说它们是相同的。

为什么 tmux 中 showconsolefont 的输出不同?我认为该命令的重点是以当前字体显示所有可用符号。由于我在 tmux 内部和外部使用相同的字体,所以我不明白为什么有什么区别。我确信我在这里缺少一些简单的 Linux 字体概念。有人可以向我指出吗?

我尝试检查我是否在 tmux 中的值$TERM并确保它默认为linux(与我的 tty 中相同$TERM),但这没有任何区别。( set -g default-terminal "linux")

arch-linux tmux fonts tty

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

标签 统计

arch-linux ×1

fonts ×1

shell ×1

signals ×1

timeout ×1

tmux ×1

tty ×1