【Linux】1行(ワンライナー)で1秒ごとに指定のコマンドを実行する方法

1行で1秒ごとに指定のコマンドを実行する方法
目次

対象

以下のようなことがしたい場合に役立ちます。

  • 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
よかったらシェアしてね!
  • URLをコピーしました!
目次