LANG всегда локальный, игнорирует ~ / .profile

В моих ~/.profile у меня есть:

export LANG=C.UTF-8

Я думаю, что это был Ubuntu по умолчанию.

Однако, когда я запускаю оболочку (например, Konsole), я получаю:

gz@gcomputer:~$ echo $LANG
de_DE.UTF-8

Даже когда я изменяю свой ~/.profile на export LANG=en_US.UTF-8, я не вижу разницы.

Почему? Как я могу это исправить?

3
задан 31 July 2016 в 06:04

2 ответа

Согласно этому ответу необходимо изменить настройки языка в etc/default/locale и ~/.pam_environment, не в ~/.profile

etc/default/locale сгенерирован update-locale таким образом, Вы делаете это для установки LANG=en_GB.UTF-8 (файл также устанавливает ЯЗЫК),

update-locale LANG=en_GB.UTF-8

В ~/.pam_environment настройки языка выглядят одинаково как в /etc/default/locale:

LANGUAGE=en_GB:en
LANG=en_GB.UTF-8

и может быть отредактирован, как желаемый. Необходимо выйти из системы и въехать задним ходом или использовать source:

В целом необходимо выйти из системы и войти в для изменений, внесенных в ~/.profile вступить в силу.

Однако можно сделать их мгновенным использованием source

source ~/.profile

Пример:

Я редактирую свой ~/.profile для включения:

export foo=bar

сохраните и выйдите...

в новой оболочке:

$ echo $foo

(ничто)

$ source ~/.profile
$ echo $foo
bar

Если ничто не изменилось после того, чтобы выходить из системы, и въезжайте задним ходом, проверьте это ~/.bash_profile и ~/.bash_login не существуйте (потому что, как упомянуто @ByteCommander, если они действительно существуют, ~/.profile не получен),

Если любой действительно существует, лучшая вещь сделать состоит в том, чтобы, вероятно, скопировать любые команды от них в Ваш ~/.profile и переименуйте их что-то как ~/.bash_profile_old и ~/.bash_login_old, так, чтобы ~/.profile получен (и Вы не в зависимости от удара, являющегося Вашей оболочкой),

Если ни один из них не существует, это может быть это ~/.profile все еще не становится полученным по некоторым причинам:

См. ответ Eliah Kagan здесь для большего количества детали

Предложенное обходное решение должно использовать... ~/.pam_environment

4
ответ дан 31 July 2016 в 06:04

По причинам, слишком утомительным для вхождения здесь, колотите, имеет несколько конфигурационных файлов в расчете на пользователя. Самые важные два .profile и .bashrc. Bash читает один или другие из них на каждом запуске, но не обоих, в зависимости от условий, которые слишком сбивают с толку меня, чтобы потрудиться помнить.

Что я делаю вместо этого помещается все значимое в .profile, плюс дополнительное чтение строки

profile_loaded=t

и затем у меня есть a .bashrc состоя только из

if test -z "$profile_loaded"; then
    . ~/.profile
fi

При принятии этого подхода важно удостовериться что все .profile делает идемпотент, который является необычным словом для того, чтобы, "сделать это несколько раз совпадает с выполнением его только однажды. Один простой способ выполнить, который должен перенести все содержание .profile в подобном условном выражении:

if test -z "$profile_loaded"; then

    # ... all the actual work goes here ...

    profile_loaded=t
fi

(Если Вам назвали файлы .bash_profile или .bash_login, это путает проблему далее: Я настоятельно рекомендую копировать их содержание в .profile, удаление их и затем чистка любое дублирование в .profile.)

1
ответ дан 31 July 2016 в 06:04

Другие вопросы по тегам:

Похожие вопросы: