ブログ

読んで思い出す。忘れるために書く

watch コマンドで設定したコマンドを自動で定期実行する

前提

下記 いずれかを満たしている環境の話 :

  1. ターミナルの画面を2画面用意している
  2. tmux などの画面分割で2画面同時操作できる
  3. VSCode などの IDE で、「エディタ画面」「ターミナル画面」2画面同時操作できる

やりたいこと・解決したいこと

  1. プログラミング・デバッグだけに集中したいので、いちいち手作業で Ruby ファイルを実行したくない
  2. 標準入力を伴う問題を解きたいので、入力テスト用ファイルを用いたい
  3. エラーがあればすぐに確認したい

準備と解決

準備

標準入力テスト用ファイルを用意する

input.txt :

1 3 4 5

最初の一歩として、標準入力を受け取る Ruby コードを書く

main.rb :

input = gets.chomp
puts input

解決

watch コマンドを使う

watch コマンドを使うことで、指定したコマンドを自動的に定期実行できる

watch -c -n 2 "ruby main.rb < input.txt"

(意味: 毎回画面表示をクリアして、2秒ごとに、渡されたコマンドを実行する)


おまけ

徐々に Ruby のコードを書いて、完成像に近づける

map で to_i 適用したい

input = gets.chomp.map(&:to_i)
# => undefined method `map` for an instance of String (NoMethodError)

puts input

split 忘れてた

input = gets.chomp.split.map(&:to_i)
puts input
# => 3
#    4
#    5

合計値を出したい (完成)

input = gets.chomp.split.map(&:to_i).sum
puts input # => 12