为什么 bash 'read' 退出时状态为 1?

为什么 bash 'read' 退出时状态为 1?

从一个答案到“Bash 脚本没有看到 SIGHUP?”,我的脚本中有以下内容:

while true; do read; done

而且,通常情况下,这效果很好。然而,当从 (tl;dr) ...其他东西运行时,read会以状态代码 1 退出。

为什么?我该如何处理这个问题并恢复所需的行为(正确触发陷阱EXIT)?


(“其他东西”是GNU 使跑步艾尔兰的ct_run,它使用erlexec跑步剧本

答案1

read手册页中的文档bash

退出状态为零,除非遇到文件结尾、read超时(这种情况下状态大于 128)、发生变量赋值错误(例如赋值给只读变量)或无效的文件描述符作为 的参数提供-u

在你的情况下,我怀疑标准输入已到达文件末尾。

由于您试图无限期地等待,同时仍然允许CtrlC,也许以下方法会更好:

while sleep 1; do :; done

这可以避免与 I/O 处理相关的意外情况,并确保对信号的及时反应。

相关内容