どーも!
たかぽんです...!
今回はLinuxのコマンドについてやりたいことを調べたのでそれについて書いていこうと思います...!
やりたいこと
まずは最初にやりたいことについてです...!
コマンド自体はなんでもいいのですが、筆者の場合はLaravelというフレームワークでたまにテストがこけてしまう...という問題があったんですね。
いつもこけるわけではないんですが、githubでデプロイをするタイミングでたま〜にこける...
故に、localでテストを繰り返し動かして確認をしたい...!と。
流石にcloneとかで設定するのは面倒くさいので、とにかく手軽にコマンドを繰り返せる方法はないかなぁ?と思って調べてみたんですね。
なので、今回やりたいこととしては、普段は自分で実行しているLinuxコマンドを繰り返し実行する....ということをやっていきます...!
繰り返し実行してみる...!
さて、それではさっそくやっていきます...!
Linuxコマンドを繰り返し実行するにはwatchコマンドを使います。
厳密にいうと、このwatchコマンドはコマンドを実行し続け、そのコマンドの出力差分を監視するのが主的な用法みたいですね...
ただ、その過程でコマンドを定期的に実行するため、それを活用してしまおう!
ということです。
watchコマンドはMac OSにはデフォルトで入っていないため、brewでインストールする必要があります。
brewが入っていない方は下記の記事を参考にHomebrewを入れてください。
brewが入っている方は以下のコマンドでwatchコマンドを入れることができます。
brew install watch
インストールが完了したら試しに以下のコマンドを使ってみましょう。
watch -n 1 pwd
pwdコマンドを2秒ごとに実行し、その結果をひょうじ....といったことができます。
実行後、プロセスは占有されますが、以下のような表示が表示されます。
Every 1.0s: pwd. Taka.local: Sun Dec 18 18:54:37 2022
/Users/taka/Practice/Test
わかりづらいのですが、日時の箇所がしっかり変更されているのがわかるかと思います。
Every 1.0s: pwd. Taka.local: Sun Dec 18 18:54:46 2022
/Users/taka/Practice/Test
pwdコマンドはカレントディレクトリまでのパスを出すだけで、出力に変化がないので、更新日時だけ更新されている様に見えますが、更新日時が書き換わっているタイミングでちゃんとコマンドの実行が行われています。
では、本当に都度実行されているのかを確認してみます。
まず、先ほどのwatchの画面が更新されているプロセスにて、Ctrl+Cで止めておきます。
止めたら、今度は以下のコマンドを実行してみます。
watch -n 1 "pwd >> log.txt"
先ほどの出力をlog.txtというファイルに書き出してみているんですね。
プロセスは引き続き占有されるし、出力先をlog.txtにしているので、何も表示されないように思いますが、数秒経ったら再度Ctrl+Cで止めてみます。
すると、lsでカレントディレクトリにlog.txtというファイルが書き出されていると思うので、catしてみます。
taka@Taka Test % ls
log.txt
taka@Taka Test % cat log.txt
/Users/taka/Practice/Test
/Users/taka/Practice/Test
/Users/taka/Practice/Test
/Users/taka/Practice/Test
/Users/taka/Practice/Test
良さそうですね...!
また、watchコマンドを実行後に別プロセスにてtailコマンドで確認してみたり、エディタ上で確認することでいい感じにリアルタイムで実行状況を確認することができます。
tail -f -n 50 log.txt
具体的な実行例は割愛しますが、上記のコマンドでlog.txtの先頭50行を表示し、以降新規で更新される差分を確認することができるはずです。
(後述するエディタの見た目に似た感じでCUI上で確認ができるようになると思います。)
エディタで試している例は以下に記載しておきます。
エディタはなんでもいいので、ファイルを開いておけばwatch実行後、上記の様に追加されていくことが確認できると思います。
この様に、watchコマンドを使うことで確かに都度都度実行されていて、その出力を蓄積したい場合は上記のようにファイルに書き出す形にしておくとよいでしょう。
まとめ
今回はLinuxコマンドを繰り返し実行する...という方法について調べてみました。
crontabにてcronの設定をして〜とかでもできそうではあるんですが、localでちょこっと軽く試すくらいでいいんだけどなぁ〜という場合はwatchコマンドが楽ちんですね...!
何か同じコマンドを繰り返し実行して、その内容をしっかり確認したい...!という場合は是非使ってみてください...!
それでわ!