如何解决为什么字符串会导致某些终端窗口关闭 “.(:2)”
我写了一个脚本并遇到了奇怪的行为。运行它的某些终端窗口会在脚本运行完成之前突然关闭。
经过几个小时的调查,我将问题追踪到了这一行输出
init: Command 'mount_all /fstab.ranchu' action=fs (/init.ranchu.rc:2) returned 0 took 1805ms.
经过进一步改进后,我确定这是重新生成此问题所需的最小序列。
.(:2)
如果我在 Intellij 代码编辑器的终端选项卡中键入此序列,该选项卡将在大约一秒钟后自行关闭。这个问题比较郁闷 当此脚本作为我的构建/CI 系统的一部分运行时发生。
它不会影响所有终端,例如 Gnome-terminal
和 xterm
在该序列上没有任何问题。
该字符串中的数字 2
实际上可以是最多 9 位的任何整数,这会导致问题。
我怀疑这个序列可能是一个终端控制序列,但我在研究中没有发现类似的东西。
另一件奇怪的事情是,有时我的脚本输出会在比预期更长的时间内停滞(缓冲,我可以看到脚本仍在工作)。
我发现这组命令解决了缓冲问题和关闭终端的问题,但我想知道发生了什么
./example.sh |& stdbuf -eL -oL sed -s 's/:\([0-9][0-9]*)\)/:_\1/'
example.sh
看起来像这样
#!/bin/bash
echo '.(:2)'
stdbuf
配置用于管道/|&
的缓冲区。
sed 语句采用 .(:2)
并将其转换为 .(:_2)
,这似乎可以防止出现问题。
解决方法
更新:
再深入研究一下。结果证明 CI 失败是由其他事情引起的,这些事情恰好发生在我上面提到的地方。
升级并重新启动 IntelliJ 后,问题也消失了。
我要归咎于一个随机故障。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。