从一个答案到“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 处理相关的意外情况,并确保对信号的及时反应。