read -t 3
時には代わりに使用する方が便利ですsleep 3
。どのように機能させるのですnohup
か?
nohup bash -c ' date; read -t 3; date ' | tail -n 2 nohup.out
ご覧のとおり、read -t 3
3秒間待ちません。
ベストアンサー1
read -t 3
(今や拡張ksh93
にもサポートされています)は、1行を読むことを意味します(zsh
bash
mksh
論理的-r
この行の行は、標準入力から$REPLY
3秒のタイムアウトまで末尾のバックスラッシュ(対応するオプションを使用しないため)に続くことができます。
stdinが端末の場合、ユーザーがEnterキーを押さない限り、3秒間スリープ状態になります(スクリプトがバックグラウンドで起動された場合、スクリプトはSIGTTIN信号で停止します)。
通常のファイルの場合は、その行を読み、すぐに返します。もしそうなら、/dev/zero
そこからギガバイトのゼロを読むのは非常に忙しいでしょう。
nohup
端末からコマンドを分離するために使用されるコマンドです。これはstdinを/dev/null
stdoutにリダイレクトし、stderrをnohup.out
。いいえこの場合、端末で読みたいです。
read
/dev/null
データを返さずにすぐに返すことが目的/dev/null
です。
使用目的がread -t
ユーザーが中断できる睡眠を取ることであれば(例えば、Enterスキップできるメッセージを読む時間を与えたいときなど)、非対話型(read -t
例:running undernohup
スクリプトを遅らせる必要がないので正しいことだと思います。
ただし、stdinが端末の場合は端末で読み取り時間を超え、そうでない場合はスリープモードに切り替えるには、次のようにします。
if [ -t 0 ]; then
read -t 3
else
sleep 3
fi
[ -t n ]
ファイル記述子があるかどうかをテストします。N(0 は stdin) は端末装置を示します。
これを行うこともできますが、保護したい端末とのやり取りを再度追加すると、そうなりますread -t 3 < /dev/tty
。nohup
nohup