Bash有時使用
有時使用read -t 3
代替sleep 3
會很方便。如何使它與nohup
一起使用?
有時使用它
read -t 3
代替sleep 3
. 我如何使它與它一起工作nohup
?nohup bash -c ' date; read -t 3; date ' | tail -n 2 nohup.out
如您所見,
read -t 3
不等待三秒鐘。
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 是終端時從終端讀取超時,否則要休眠,那麼您可以這樣做:
if [ -t 0 ]; then read -t 3 else sleep 3 fi
[ -t n ]
測試文件描述符n(0 是標準輸入)是否指向終端設備。您可以這樣做
read -t 3 < /dev/tty
,但這會破壞nohup
通過添加與終端的互動nohup
來防止的目的。