使用せずにコマンドを遅延させるための代替、代替、またはbashトリックはありますsleepか?たとえば、実際にスリープを使用せずに以下のコマンドを実行します。
$ sleep 10 && echo "This is a test"
at1かもしれませんが、私は、任意の使用例を見つけることができませんでした。
使用せずにコマンドを遅延させるための代替、代替、またはbashトリックはありますsleepか?たとえば、実際にスリープを使用せずに以下のコマンドを実行します。
$ sleep 10 && echo "This is a test"
at1かもしれませんが、私は、任意の使用例を見つけることができませんでした。
回答:
次の選択肢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ためです。waiterrexit
他のシェルでは:
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ますか?
readselect(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ですか?