glarry Asked: 2018-02-02 04:03:12 +0800 CST2018-02-02 04:03:12 +0800 CST 2018-02-02 04:03:12 +0800 CST 有时使用`read -t 3`代替`sleep 3`会很方便。我如何使它与`nohup`一起工作? 772 有时使用它read -t 3代替sleep 3. 我如何使它与它一起工作nohup? nohup bash -c ' date; read -t 3; date ' | tail -n 2 nohup.out 如您所见,read -t 3不等待三秒钟。 bash nohup 1 个回答 Voted Best Answer Stéphane Chazelas 2018-02-02T04:56:20+08:002018-02-02T04:56:20+08:00 read -t 3(ksh93现在也支持一个扩展zsh,bash和mksh)意味着从标准输入读取一行(逻辑行中的行可能会以一个尾随反斜杠继续,因为您不使用该-r选项),$REPLY超时时间为 3 秒。 如果 stdin 是一个终端,它将休眠 3 秒,除非用户按下回车键(如果脚本在后台启动,脚本将通过 SIGTTIN 信号暂停)。 如果它是一个常规文件,它将从中读取该行并立即返回。如果是/dev/zero这样,它将从那里非常繁忙地读取千兆字节的零,等等。 nohup是用于从终端分离命令的命令。它将 stdin 重定向到/dev/nullstdout 和 stderr 到nohup.out. 因此,在这种情况下,您通常不想从终端读取。 readon/dev/null立即返回,不返回任何数据,这就是/dev/null目的。 如果使用的目的read -t是获得一种可以被用户(通过按下Enter)打断的睡眠,比如当你想让他们有时间阅读他们可以跳过的消息时,那么read -t在非交互时立即返回(就像在 下运行时一样nohup)似乎是正确的做法,因为那时延迟脚本是没有意义的。 但是,如果您想在 stdin 是终端时从终端读取超时,否则要休眠,那么您可以这样做: if [ -t 0 ]; then read -t 3 else sleep 3 fi [ -t n ]测试文件描述符n(0 是标准输入)是否指向终端设备。 您可以这样做read -t 3 < /dev/tty,但这会破坏nohup通过添加与终端的交互nohup来防止的目的。
read -t 3
(ksh93
现在也支持一个扩展zsh
,bash
和mksh
)意味着从标准输入读取一行(逻辑行中的行可能会以一个尾随反斜杠继续,因为您不使用该-r
选项),$REPLY
超时时间为 3 秒。如果 stdin 是一个终端,它将休眠 3 秒,除非用户按下回车键(如果脚本在后台启动,脚本将通过 SIGTTIN 信号暂停)。
如果它是一个常规文件,它将从中读取该行并立即返回。如果是
/dev/zero
这样,它将从那里非常繁忙地读取千兆字节的零,等等。nohup
是用于从终端分离命令的命令。它将 stdin 重定向到/dev/null
stdout 和 stderr 到nohup.out
. 因此,在这种情况下,您通常不想从终端读取。read
on/dev/null
立即返回,不返回任何数据,这就是/dev/null
目的。如果使用的目的
read -t
是获得一种可以被用户(通过按下Enter)打断的睡眠,比如当你想让他们有时间阅读他们可以跳过的消息时,那么read -t
在非交互时立即返回(就像在 下运行时一样nohup
)似乎是正确的做法,因为那时延迟脚本是没有意义的。但是,如果您想在 stdin 是终端时从终端读取超时,否则要休眠,那么您可以这样做:
[ -t n ]
测试文件描述符n(0 是标准输入)是否指向终端设备。您可以这样做
read -t 3 < /dev/tty
,但这会破坏nohup
通过添加与终端的交互nohup
来防止的目的。