アニメ『STEINS;GATE』(シュタインズゲート)(2011)
タイムリープものって面白いですねえ。引き込まれるアニメでした。残業が多くてゆっくりする時間がないときは、視聴時間が短い理由でアニメを見るのですが、連続で見てしまうので、結局長時間テレビに釘付けです。つい見すぎて朝方になると、ああしまった会社いく時間だ。。orz。昨日の夜にタイムリープしたい気持ちでいっぱいです。
時間を指定してコマンドを実行できるatコマンドを使ってみます。まず出力先を端末ウィンドウにするために、今使用しているttyを調べます。
~$ tty /dev/pts/0
出力できるか確認します。
~$ echo TESTTEST > /dev/pts/0 TESTTEST ~$
現在の時刻を確認します。
~$ date +%T 23:29:16
今23時29分なので、23時30分に、HELLOと表示してみましょう。
~$ at 23:30 warning: commands will be executed using /bin/sh at>
at 時間
と入力すると、プロンプトがat>に変わり、コマンドの入力が求められます。
続けて、コマンドを入力します。時間になったら実行したいコマンドです。
at> echo HELLO>/dev/pts/0 at> <EOT> job 42 at Tue Sep 6 23:30:00 2016
これで、23時30分になったらechoコマンドが実行されます。
では、現在時刻を表示しつつ、コマンドが実行されるのを待ちましょう。
~$ while :;do date +%T;sleep 1;done 23:29:51 23:29:52 23:29:53 23:29:54 23:29:55 23:29:56 23:29:57 23:29:58 23:29:59 HELLO 23:30:00 23:30:01 23:30:02 ^C ~$
23時30分に、HELLOが表示されましたね。
でも、23:29:59に表示されたのか、23:30:00に表示されたのか微妙ですね。
次は、atコマンドで、時間をbanner表示してみます。
~$ date +%T 23:42:00 ~$ at 23:43 warning: commands will be executed using /bin/sh at> (echo;banner `date +%T`)>/dev/pts/0 at> <EOT> job 43 at Tue Sep 6 23:43:00 2016 ~$ while :;do date +%T;sleep 1;done 23:42:56 23:42:57 23:42:58 23:42:59 ##### ##### # # ##### # ### ### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ##### ##### ####### ##### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ####### ##### # # ##### # ### ### 23:43:00 23:43:01 ^C ~$
間違いなく23:43ピッタリにコマンドが実行されました。
次は、1分後を指定します。
~$ date +%T 00:06:14 ~$ at now + 1min;date +%T warning: commands will be executed using /bin/sh at> (echo;banner `date +%T`)>/dev/pts/0 at> <EOT> job 47 at Wed Sep 7 00:07:00 2016 00:06:31 ~$ while :;do date +%T;sleep 1;done 00:06:40 00:06:41 00:06:42 (中略) 00:06:56 00:06:57 00:06:58 00:06:59 00:07:00 ### ### # ### ####### # ### ### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ### ### # ### # # ### ### 00:07:01 00:07:02 ^C ~$
1分後と言いましたが、atコマンドで指定できるのは、分単位ですので、1分後を指定すると、1分以内ということになりますね。
最後に、タイトルにあるように、再帰的にatコマンドを発行し、1分毎にコマンドを実行したいと思います。
crontabの登録が煩わしいとき使います。
~$ echo '(echo;banner `date +%T`)>/dev/pts/0;at now + 1min -f $PWD/a.sh'>a.sh ~$ . a.sh ### ### # # ##### # ### ### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ####### ###### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ### ### # # ##### # ### ### warning: commands will be executed using /bin/sh job 64 at Wed Sep 7 00:50:00 2016 ~$ ### ### # ####### ### # ### ### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ##### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ### ### # ##### ### # ### ### ### ### # ####### # # ### ### # # # # # # # ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ##### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ### ### # ##### ##### # ### ### ### ### # ####### ##### # ### ### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ##### ##### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ### ### # ##### ####### # ### ### ^C ~$
停止するには、atqでジョブを確認して、atrmで削除します。
~$ atq 70 Wed Sep 7 00:56:00 2016 a takk ~$ atrm 70 ~$ atq ~$
atコマンドで、現実の時間も戻ればいいのに。
コメント