株式会社サーバーワークスでは一緒に働く仲間を募集しています
迷えるバックエンド / インフラエンジニアのみなさま、こんにちは。
新卒一年目の加藤です。
今日は、私が最近出会った謎の言語エラーについてご紹介します。
言語の設定をいじった記憶もないのに、ログインしたLinuxでなぜか日本語が入力できなかったり、出力できなかったり、と言った問題が発生しているあなたに耳より情報です。
それ、もしかしたら、Terminal(iTerm)の設定のせいかもしれません。
発生した問題
- EC2インスタンスにログインすると、なぜか日本語入力ができない。
- ログイン時に”-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory”と表示される
この時、ログインしたインスタンス上でlocaleを叩くと、
LANG="es_US.UTF-8"
LC_COLLATE="es_US.UTF-8"
LC_CTYPE="UTF-8"
LC_MESSAGES="es_US.UTF-8"
LC_MONETARY="es_US.UTF-8"
LC_NUMERIC="es_US.UTF-8"
LC_TIME="es_US.UTF-8"
LC_ALL=
と表示されました。明らかに”LC_CTYPE”の表記がおかしい。
発見した原因 – Terminalの自動言語設定
Terminal(iTerm)には、ローカルのbashで用いている言語設定をログインしたLinuxでも引き継ぐ、という設定が標準で装備されています。今回のエラーは、この設定が原因だった様子。
解決するためには設定を解除します。
Terminal
- [ターミナル] -> [環境設定]を開く
- [プロファイル]タブ → [詳細]タブを開く
- [言語環境]の[起動時にロケール環境変数を設定]のチェックを外す
iTerm2
- [iTerm2] -> [Preference]を開く
- [Profiles]タブ -> [Terminal]タブを開く
- [Envirionment]の[Set locale variables automatically]のチェックを外す
ただしこの設定を行うと日本語入力ができなくなってしまう場合があります。
その場合、日本語入力を使いたい環境の.bash_profileなどに、以下の言語設定を追記して解消しましょう。
export LANG="ja_JP.UTF-8"