Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

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

$
0
0

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

状況

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

test.rb
str=gets.chompputsstr

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

$ ruby test.rb                                                                                                                                 
hogehoge
hogehoge
$ 

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

$ ruby test.rb                                                                                                                                 
hogehoge

$ 

原因と解決策

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

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

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

" set fileformats=mac,unix,dos

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

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

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

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

教訓

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


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>