The Apple Geek

Чему ты научился сегодня?

Исправление ошибок локали при работе по ssh через Terminal.app в OS X Lion

После установки OS X Lion я заметил, что при работе на удалённых хостах по ssh стали выдаваться такие ошибки “Please check that your locale settings”:

perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = "en_US.UTF-8"
    are supported and installed on your system.

Причина в том, что в OS X Lion Terminal.app LC_CTYPE выставляется в значение UTF-8, а не en_US.UTF-8.

Вот информация по локали на Mac:

$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

На удалённую систему передаётся LC_CTYPE (/etc/ssh_config: SendEnv LANG LC_* ):

$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Есть два способа решения.

Первый - отключить в настройках Terminal.app в закладке Advanced “Set locale environment variables on startup”:

01 locale

Второй - внести в ~/.bash_profile и ~/.bashrc правильный параметр:

$ cat .bash_profile 
export LC_CTYPE=en_US.UTF-8

Comments