LoginSignup
4
5

More than 5 years have passed since last update.

Mac で Ruby の標準入力が受け取れないと思ったらvimrcに要らんもん書いてたせいだった

Posted at

最近 Ubuntu から Mac に環境移行して,Ubuntuとかirb上では当然使える gets が何故かMac のターミナル上でだけ使えないということがありました.
これに対して,「Ruby Mac 標準入力 使えない」 とか 「Mac Ruby gets doesn't work」 とか IQ低そうなキーワード でググってたのですが,まったくヒットせず,それもそのはず,Mac は全く関係なくてvimrcというか改行コードのせいなのでした.
こんな事態になる場合は滅多にないと思いますが,同じような症状でググって途方に暮れる人がいないとも限らないので一応書き留めておきます.

状況

Ruby で標準入力を一行受け取って,その文字を出力するコードは以下のようになります.

test.rb
str = gets.chomp
puts str

なので,このプログラムを実行した時の結果は,以下になることが期待されます.

$ ruby test.rb                                                                                                                                 
hogehoge
hogehoge
$ 

ただ,自分の環境では,getsの内容がstrに代入されず,以下のようになっていました.

$ ruby test.rb                                                                                                                                 
hogehoge

$ 

原因と解決策

結論からいうと,ソースコードの改行コードが ¥r になっていたのが原因で,¥n に置換したら解決しました.

システム 改行コード
Unix LF(¥n)
Mac (OS X以前) CR(¥r)
Windows CR+LF(¥r¥n)

なんでそんなことになってたかというと,vimrc に昔わけも分からず書いた行が混じっていたからでした.

" set fileformats=mac,unix,dos

コメントアウトして解決.

なぜ Ruby のソースコードの改行コードの違いで問題が起きるのか

わからないのでもし分かる方いらっしゃったら教えて下さい.
以下のような Python のコードは,改行コードが ¥r であっても,ターミナル上で正常に動きます.

test.py
-*- coding: utf-8 -*-
s = raw_input()
print s

教訓

.vimrc にわけも分からずごちゃごちゃ書くのはやめよう

4
5
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5