スリープなしでX秒後にコマンドを実行するにはどうすればよいですか。または、スリープなしでシェルなしでそのコマンドの応答を待つだけですか?
私はこれを使いましたが、うまくいきませんでした
sleep 5 ; ls > a.txt
バックグラウンドで実行する必要があります。私は5秒後にls
を実行しようとするスクリプトでそれを実行する必要がないようにし、シェルはスリープの終了を待つだけではありません
ヘネスが提案したことを書くより簡潔な方法は
(sleep 5; echo foo) &
または、数秒以上必要な場合は at
を使用できます。 at
にコマンドを与える方法は3つあります。
パイプする:
$ echo "ls > a.txt" | at now + 1 min
warning: commands will be executed using /bin/sh
job 3 at Thu Apr 4 20:16:00 2013
実行するコマンドをテキストファイルに保存し、そのファイルをat
に渡します。
$ echo "ls > a.txt" > cmd.txt
$ at now + 1 min < cmd.txt
warning: commands will be executed using /bin/sh
job 3 at Thu Apr 4 20:16:00 2013
STDINからat
コマンドを渡すこともできます。
$ at now + 1 min
warning: commands will be executed using /bin/sh
at> ls
次に、 CtrlDat
シェルを終了します。 ls
コマンドは1分で実行されます。
次のように、[[CC]YY]MMDDhhmm[.ss]
の形式で非常に正確な時刻を指定できます
$ at -t 201412182134.12 < script.sh
これにより、スクリプトscript.sh
が2014年12月18日の21:34および12秒に実行されます。したがって、理論的には、at
を使用して5秒後に何かを実行できます。しかし、それはタンクを使ってハエをたたくようなもので、ヘネスの提案はより優れています。
バックグラウンドでシェルまたはスクリプトを起動することで、この問題を回避できます。
例:
/bin/sh -c "sleep 5; echo foo"& [1] 63791 > Active Shell Prompt here foo 5 2番目に遅い出力が表示されます。