使用せずにコマンドを遅延させるための代替、代替、またはbashトリックはありますsleep
か?たとえば、実際にスリープを使用せずに以下のコマンドを実行します。
$ sleep 10 && echo "This is a test"
at
1かもしれませんが、私は、任意の使用例を見つけることができませんでした。
使用せずにコマンドを遅延させるための代替、代替、またはbashトリックはありますsleep
か?たとえば、実際にスリープを使用せずに以下のコマンドを実行します。
$ sleep 10 && echo "This is a test"
at
1かもしれませんが、私は、任意の使用例を見つけることができませんでした。
回答:
次の選択肢sleep
がat
ありcron
ます。sleep
これらに反して、実行に必要な時間を提供する必要があります。
をatd
実行して、サービスが実行されていることを確認しますservice atd status
。
ここで、日付がUTCの午前11時17分であるとします。UTC 11:25にコマンドを実行する必要がある場合、構文は次のとおりですecho "This is a test" | at 11:25
。
ここでatd
、デフォルトではジョブの完了をログに記録しないことに注意してください。詳細については、このリンクを参照してください。アプリケーションが独自のロギングを持っている方が良いです。
あなたには、ジョブをスケジュールすることができcron
、より参照してください、:man cron
そのオプションが表示されたりcrontab -e
、新しいジョブを追加します。/var/log/cron
ジョブの実行に関する情報を確認できます。
FYI sleep system call
は現在の実行を中断し、渡された引数に基づいてスケジュールします。
編集:
@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
を使用せずに10秒間スリープするsleep
。coproc
そのことを確認することであるread
のSTDINは何が今までから出て来ないだろうパイプです。これは、オプションが設定されている場合、シェルが終了するSIGALRM配信がの終了ステータスに反映される|| true
ためです。wait
errexit
他のシェルでは:
mksh
そして、ksh93
しているsleep
ビルトインノーポイント、そこに何か他のものを使用して(どちらもサポートしていてもread -t
)。
zsh
もサポートしますがread -t
、の周りselect()
に組み込みのラッパーもあるため、以下も使用できます。
zmodload zsh/zselect
zselect -t 1000 # centiseconds
インタラクティブシェルセッションから実行するようにスケジュールする場合は、のzsh/sched
モジュールzsh
も参照してください。
read -t 10 < /dev/zero || true
ますか?
read
select(2)または類似のものを使用してシェルが実装されると期待するだろう(このタイムアウトに対する読み取りが良い答えであることを意味する)。私はあなたに矛盾するのではなく、驚きを表明していますが、これについてのさらなる議論を指摘できますか?
/dev/zero
は、無限量のデータ(NULバイト)を含むファイルです。そのread
ため、これらの10秒間にできる限り多くのデータを読み取ります。ありがたいことに、bash
変数にNULバイトを格納することをサポートしていない場合、メモリを消費しませんが、それでもCPUリソースを消費します。
/dev/stdout
する場合はttyデバイスになるため、副作用(バックグラウンドで実行する場合はスクリプトを停止するなど)が発生し、ユーザーがEnterキーを押すと復帰します。read -t 10 /dev/stdout | :
Linuxで動作しますが、Linuxでのみcoproc
動作しますが、OSに関係なく動作します。
他のいくつかのアイデア。
top -d10 -n2 >/dev/null
vmstat 10 2 >/dev/null
sar 10 1 >/dev/null
timeout 10s tail -f /dev/null
bash組み込み変数$SECONDS
とビジーループの使用:
for((target=$((SECONDS + 10)); SECONDS < target; true)); do :; done
本の中で最も古いトリック:
read && echo "This is a test"
打つだけでEnter続行します!
sleep
)の例を示し、なしで同等の代替を要求します。だから、read
申し訳ありませんが、解析しません。;)
--- press «enter» to continue ---
;-)
BASICを実行しているマイクロコンピューターの時代には、通常、遅延は空のループで達成されていました。
FOR I = 1 TO 10000:NEXT
同じ原則を使用して、シェルスクリプトに遅延を挿入できます。
COUNTER=0; while [ $COUNTER -lt 10000 ]; do :; let COUNTER=COUNTER+1; done
もちろん、このアプローチの問題は、プロセッサの速度に応じて(または同じマシンでも負荷が異なる場合でも)遅延の長さがマシンごとに異なることです。とは異なりsleep
、おそらくCPU(またはそのコアの1つ)を最大化します。
ビルトインはありません。ビルトインと同じですsleep
(sleep
ビルトインでない限り)。ただし、待機する他のコマンドがいくつかあります。
いくつかが含まれます。
at
およびcron
:特定の時間にタスクをスケジュールするために使用されます。
inotifywait
:ファイル、またはファイルの変更/削除/追加などを待つために使用されます
at
か?
cron
にタスクを保存しcrontab
ますか?at
スケジュールされたデータはどこに保存されますか?
Land of Windows and Batchesのクラシック:
ping -c 11 localhost >/dev/null && echo "This is a test"
sleep
ですか?