You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用read -t 3替代sleep 3时,如何让其在nohup环境下正常工作?

read -t在nohup环境下失效的问题

有时候用read -t 3替代sleep 3确实挺便捷的——它不仅能按指定时长等待,还支持用户输入来中断等待,灵活性拉满。但这里有个容易踩的坑:这个命令在nohup环境下完全没法正常工作。

你可以亲手验证这个问题:
先执行这条命令:

nohup bash -c 'date; read -t 3; date' > nohup.out 2>&1 &

等几秒后查看输出文件的最后两行:

tail -n 2 nohup.out

你会发现两次date的输出时间几乎没有间隔,明明白白地说明read -t 3根本没等待3秒就直接跳过了。

背后的原因其实很直观:read命令默认从标准输入(stdin)读取内容,而nohup会自动把进程的stdin重定向到/dev/null(空设备)。当read尝试从/dev/null读取时,会立刻收到EOF(文件结束符),所以哪怕你设置了-t超时参数,它也会直接退出,完全不会进入等待状态。

如果是在nohup环境下需要定时等待,最稳妥的方式还是用sleep 3;要是非得用read -t,你得把它的输入重定向到一个不会立刻返回EOF的流(比如某个终端设备),但这种操作完全没必要,反而不如sleep来得直接省心。

内容的提问来源于stack exchange,提问作者glarry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:13:10