У меня проблема со слегка настроенным образом Debian, над которым я пытаюсь работать без головы. Проблема в том, что список установленных локалей был сокращен до следующего:
C
en_GB
en_GB.iso88591
en_GB.iso885915
en_GB.utf8
POSIX
Однако когда я вхожу в систему как root (с профилем как ванильный), я обнаруживаю следующее:
~# set | grep LC_
LC_CTYPE=en_US.UTF-8
Это единственный набор переменных среды LC_, и, предположительно, это означает, что он явно где-то установлен (и, учитывая, что / etc / default / locale содержит только LANG = en_GB, я не вижу другой альтернативы). Однако я не вижу, где он устанавливается, и тот факт, что это неправильно, мешает, например, установке postgresql-8.4. Я знаю, что могу
LC_CTYPE=en_GB apt-get install postgresql-8.4
чтобы обойти это, но мне бы очень хотелось понять, откуда взялся этот параметр, и я действительно не нравится идея установки ненужного в противном случае языкового стандарта, чтобы избавиться от этого. Итак: откуда взялась эта настройка LC_CTYPE и как ее убрать?
Для справки в будущем я обнаружил проблему, и она не имеет ничего общего с Bash.
Проблема в том, что sshd_config имеет следующую запись:
AcceptEnv LANG LC_*
Это позволяет моим локальным переменным среды с именем LC_whatever (включая LC_CTYPE, проблемный) переопределять удаленные настройки, поэтому, когда я подключился, процесс ssh соответствующим образом установил свои переменные среды, а процесс bash послушно их унаследовал. Нигде в этом процессе нет проверки, что параметр LC_CTYPE действителен на дальней стороне SSH-соединения.
Мое временное решение - указать заведомо исправный LC_CTYPE в конкретной команде, которую я запускаю на дальней стороне. Я не знаю, какое «правильное» решение этой проблемы.
Вы можете установить недостающие языковые стандарты:
apt-get install debconf
dpkg-reconfigure locales
Выберите языковые стандарты, которые вы хотите установить.