sleep
を使用せずにコマンドを遅延させるための代替手段、代替手段、またはbashトリックはありますか?たとえば、実際にスリープを使用せずに次のコマンドを実行します。
$ sleep 10 && echo "This is a test"
sleep
に代わるものがあります:at
とcron
です。 sleep
とは逆に、これらを実行するために必要な時間を提供する必要があります。
service atd status
を実行して、atd
サービスが実行されていることを確認します。
では、日付がUTCの午前11時17分だとします。コマンドを11:25 UTCに実行する必要がある場合、構文はecho "This is a test" | at 11:25
です。
ここで、デフォルトではatd
はジョブの完了をログに記録しないことに注意してください。詳細はこちら link を参照してください。アプリケーションに独自のロギングがあることをお勧めします。
詳細については、cron
でジョブをスケジュールできます。詳細については、man cron
を参照してオプションを確認するか、crontab -e
で新しいジョブを追加してください。 /var/log/cron
は、ジョブの実行に関する情報を確認できます。
FYI sleep system call
は現在の実行を一時停止し、それをw.r.tでスケジュールします。渡された引数。
編集:
@Gaiusが述べたように、at
コマンドに分の時間を追加することもできます。ただし、時間は12:30:30
であり、スケジューラはnow +1 minutes
で実行したとします。 60秒に変換される1分が指定されていても、at
は実際に12:31:30
までジョブを実行するのを待機せず、12:31:00
でジョブを実行します。時間単位はminutes, hours, days, or weeks
にすることができます。詳細については、man at
をご覧ください
例:echo "ls" | at now +1 minutes
bash
ビルトインを使用すると、次のことができます。
_coproc read -t 10 && wait "$!" || true
_
sleep
を使用せずに10秒間スリープする。 coproc
は、read
のstdinが何も出力されないパイプになるようにするためのものです。 _|| true
_は、wait
の終了ステータスがerrexit
オプションが設定されている場合にシェルを終了させるSIGALRM配信を反映するためです。
他のシェルでは:
mksh
と_ksh93
_にはsleep
が組み込まれています。他に何も使用しても意味がありません(どちらも_read -t
_もサポートしています)。
zsh
は_read -t
_もサポートしますが、select()
の組み込みラッパーも備えているため、次のものも使用できます。
_zmodload zsh/zselect
zselect -t 1000 # centiseconds
_
インタラクティブなシェルセッションから実行するようにスケジュールする場合は、_ _zsh/sched
_モジュールのzsh
も参照してください。
他のいくつかのアイデア。
top -d10 -n2 >/dev/null
vmstat 10 2 >/dev/null
sar 10 1 >/dev/null
timeout 10s tail -f /dev/null
read
の非標準の-t delay
オプションを使用することを提案している回答があるため、標準のシェルでタイムアウトした読み取りを行う方法を次に示します。
{ ss=`stty -g`; stty -icanon min 0 time 20; read foo; stty "$ss"; }
stty time
の引数は、1/10秒単位です。
Bash組み込み変数$SECONDS
とbusy-loopを使用します。
for((target=$((SECONDS + 10)); SECONDS < target; true)); do :; done
本の中で最も古いトリック:
read && echo "This is a test"
ちょうどヒット Enter そしてそれは続くでしょう!
マイクロコンピュータがBASICを実行していた時代には、遅延は通常空のループで実現されていました。
FOR I = 1 TO 10000:NEXT
同じ原則を使用して、シェルスクリプトに遅延を挿入できます。
COUNTER=0; while [ $COUNTER -lt 10000 ]; do :; let COUNTER=COUNTER+1; done
もちろん、このアプローチの問題は、遅延の長さがプロセッサの速度に応じてマシンごとに異なることです(または、同じマシン上でも異なる負荷がかかる)。 sleep
とは異なり、CPU(またはそのコアの1つ)もおそらく最大になります。
Windowsとバッチの土地からのクラシック:
ping -c 11 localhost >/dev/null && echo "This is a test"
sleep
と同じ機能を持つ組み込みはありません(sleep
が組み込まれていない場合)。ただし、待機する他のコマンドがいくつかあります。
いくつか含まれています。
at
およびcron
:特定の時間にタスクをスケジュールするために使用されます。
inotifywait
:ファイル、またはファイルの変更/削除/追加/その他を待機するために使用されます
ファイル内の新しい行をインタラクティブに待機する場合は、
tail -f
ファイルシステムの変更を待っていますか?次に、例えば.
inotify / inoticoming
また、「待機」の意味に応じて、他のオプションもあります。