時には `sleep 3`の代わりに `read -t 3`を使う方が便利です。 「nohup」で動作させるにはどうすればよいですか?

時には `sleep 3`の代わりに `read -t 3`を使う方が便利です。 「nohup」で動作させるにはどうすればよいですか?

read -t 3時には代わりに使用する方が便利ですsleep 3。どのように機能させるのですnohupか?

nohup bash -c ' date; read -t 3; date ' | tail -n 2 nohup.out

ご覧のとおり、read -t 33秒間待ちません。

ベストアンサー1

read -t 3(今や拡張ksh93にもサポートされています)は、1行を読むことを意味します(zshbashmksh論理的-rこの行の行は、標準入力から$REPLY3秒のタイムアウトまで末尾のバックスラッシュ(対応するオプションを使用しないため)に続くことができます。

stdinが端末の場合、ユーザーがEnterキーを押さない限り、3秒間スリープ状態になります(スクリプトがバックグラウンドで起動された場合、スクリプトはSIGTTIN信号で停止します)。

通常のファイルの場合は、その行を読み、すぐに返します。もしそうなら、/dev/zeroそこからギガバイトのゼロを読むのは非常に忙しいでしょう。

nohup端末からコマンドを分離するために使用されるコマンドです。これはstdinを/dev/nullstdoutにリダイレクトし、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/ttynohupnohup

おすすめ記事