毎回どうやるんだっけかなーと調べてしまうのでメモ
progress.rb
puts 'start'
list = (0..100).to_a
total = list.size
list.each.with_index(1) do |_v, i|
print "progress... #{(i.to_f / total * 100).round}%\r" if $stdout.tty?
sleep 0.01
end
puts ''
puts 'done'
やってること
-
$stdout.tty?
- 端末から直接実行時にプログレスを表示
-
ruby progress.rb | less
とかするとプログレスは表示しない
-
print
の\r
-
carriage return
カーソルを行頭に戻す文字コード
-
-
puts ''
-
\r
でカーソルが先頭に移動してしまってるので改行
-