のread -t 3
代わりに使用すると便利な場合がありsleep 3
ます。どうすればそれを動作させることができnohup
ますか?
nohup bash -c ' date; read -t 3; date ' | tail -n 2 nohup.out
ご覧のとおりread -t 3
、3秒待たないでください。
read -t 3
(ksh93
拡張機能は、、およびでサポートされるようzsh
にbash
なりましたmksh
)は、stdinから3秒のタイムアウトで1行(その行の論理行は末尾の円記号で継続される場合があり-r
ます)を読み取ることを目的としています$REPLY
。
stdinが端末の場合、ユーザーがEnterキーを押さない限り、3秒間スリープします(スクリプトがバックグラウンドで開始された場合、スクリプトはSIGTTINシグナルで中断されます)。
通常のファイルの場合は、その行を読み取り、すぐに戻ります。もしそうなら/dev/zero
、そこからギガバイトのゼロの読み取りを非常に忙しくします。
nohup
は、端末からコマンドを切り離すために使用するコマンドです。stdinをにリダイレクトし/dev/null
、stdoutとstderrをにリダイレクトしnohup.out
ます。したがって、通常、その場合は端末から読み取りたくないでしょう。
read
/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はstdin)が端末デバイスを参照しているかどうかをテストします。
あなたはそうすることができますread -t 3 < /dev/tty
が、nohup
それnohup
は防御することを意図した端末との相互作用を追加することによって目的を無効にします。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加