この記事を読むと・・・ |
---|
1行で複数回のコマンドを実行する方法が理解できる |
目次
1秒ごとにコマンドを実行する方法
1行で複数回のコマンドを実行したい場合、無限ループを使いコマンドを実行する方法があります。
本記事ではdate
コマンドを例に実施します。
以下のようにコマンド実行することで、date
コマンドを1秒ごとに実行することができます。
# while true; do date; sleep 1; done
2023年 12月 20日 水曜日 22:44:00 JST
2023年 12月 20日 水曜日 22:44:01 JST
2023年 12月 20日 水曜日 22:44:02 JST
2023年 12月 20日 水曜日 22:44:03 JST
2023年 12月 20日 水曜日 22:44:04 JST
2023年 12月 20日 水曜日 22:44:05 JST
2023年 12月 20日 水曜日 22:44:06 JST
2023年 12月 20日 水曜日 22:44:07 JST
2023年 12月 20日 水曜日 22:44:08 JST
2023年 12月 20日 水曜日 22:44:09 JST
2023年 12月 20日 水曜日 22:44:10 JST
^C
コマンド例の解説
以下のコマンドについて解説します。
while true; do date; sleep 1; done
while true;
while文は条件が真(true)の場合に繰り返すことを示しています。
ここでは、常に真となる条件を指定しています。
trueは常に真を返すコマンドであるため、この部分は無限ループとなります。
do コマンド;
while文で指定された条件が真の場合に実行されるコマンドを示しています。
本記事ではコマンドとして、date
コマンドを指定し、ターミナルに現在の日付と時刻を表示しています。
sleep 1;
sleep
コマンドは指定した秒数だけプログラムの実行を一時停止させるためのコマンドです。
ここでは1秒間プログラムの実行を停止しています。
これにより、1秒ごとにdate
コマンドを実行させることができます。
done;
whileループの終了を示しています。
条件が真の間はこのブロックが繰り返し実行されます。
本記事の場合は、常に真となる条件を指定しているため、Ctrl+C
などでプログラムを中断するまで処理が続きます。
また、障害時の書き込みテストなどを実施したいときには、date
コマンドの出力先を指定することで、書き込みが途切れないことを確認したりもできます。
# while true; do date >> /tmp/writetest.txt; sleep 1; done
^C
# cat /tmp/writetest.txt
2023年 12月 20日 水曜日 22:56:34 JST
2023年 12月 20日 水曜日 22:56:35 JST
2023年 12月 20日 水曜日 22:56:37 JST
2023年 12月 20日 水曜日 22:56:38 JST
2023年 12月 20日 水曜日 22:56:39 JST
2023年 12月 20日 水曜日 22:56:40 JST
2023年 12月 20日 水曜日 22:56:41 JST
2023年 12月 20日 水曜日 22:56:42 JST
2023年 12月 20日 水曜日 22:56:43 JST
2023年 12月 20日 水曜日 22:56:44 JST
2023年 12月 20日 水曜日 22:56:45 JST
2023年 12月 20日 水曜日 22:56:46 JST
2023年 12月 20日 水曜日 22:56:47 JST
2023年 12月 20日 水曜日 22:56:48 JST