@znz blog

ZnZ の memo のようなもの

Macでirbなどでの文字化けを直した

| Comments

基本的には rails cで日本語が通らないときの直し方 のやり方そのままで、 one liner としてまとめただけです。

先に結論を書いておくと install_name_tool -change /usr/lib/libedit.3.dylib $(brew list readline | grep libreadline.dylib) $(ruby -r readline -e 'puts $".grep /readline/') になりました。

readline.bundle の探し方

まず readline.bundle の探し方です。

実際に require 'readline' した時の $LOADED_FEATURES から 探すのが確実ということで、 ruby -r readline -e 'puts $".grep /readline/' としました。 試したところ、 Array#grep で見つかるのが1個だけだったので、 そのまま puts しています。 複数見つかるようならもう少し調整が必要だと思います。

1
2
3
% ruby -r readline -e 'puts $".grep /readline/'
/Users/kazu/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/x86_64-darwin12.4.1/readline.bundle
% otool -L $(ruby -r readline -e 'puts $".grep /readline/')

readline のインストール

homebrew を使っているので、 brew install readline でインストールしました。

インストールされた libreadline の場所は brew list readline | grep libreadline.dylib で調べました。

libedit/usr/lib/libedit.3.dylib という名前でリンクされているので、 libreadline.6.dylib という名前を使った方が良いのかもしれませんが、 homebrew でインストールされているパスに バージョンが含まれていて、 ファイル名にバージョンを含めても意味がないと思って、 バージョンなしにしました。

1
2
% brew list readline | grep libreadline.dylib
/usr/local/Cellar/readline/6.2.4/lib/libreadline.dylib

install_name_tool

Qiita の記事にあったように install_name_tool -change /usr/lib/libedit.3.dylib $(brew list readline | grep libreadline.dylib) $(ruby -r readline -e 'puts $".grep /readline/') でリンクを変更しました。 念のため、実行前に ruby -rpp -e 'pp ARGV' -- で実行内容を確認してから実行しました。

1
2
3
4
5
6
7
% ruby -rpp -e 'pp ARGV' -- install_name_tool -change /usr/lib/libedit.3.dylib $(brew list readline | grep libreadline.dylib) $(ruby -r readline -e 'puts $".grep /readline/')
["install_name_tool",
 "-change",
 "/usr/lib/libedit.3.dylib",
 "/usr/local/Cellar/readline/6.2.4/lib/libreadline.dylib",
 "/Users/kazu/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/x86_64-darwin12.4.1/readline.bundle"]
% install_name_tool -change /usr/lib/libedit.3.dylib $(brew list readline | grep libreadline.dylib) $(ruby -r readline -e 'puts $".grep /readline/')

Comments