使用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
相关产品推荐
相关产品推荐

