Я использую сервер Debian (uname -v output #1 SMP Debian 4.9.65-3+deb9u1 (2017-12-23)). Когда я вхожу в систему с любого из нескольких клиентов (среди прочего, ноутбук MacOS 10.13 с ssh по умолчанию, приложение "Prompt" на iOS), LANG=C , несмотря на передачу LANG=en_US.UTF-8 от клиента. Вот некоторая соответствующая информация:
client$ env | grep LANG
LANG=en_US.UTF-8
client$ ssh -v server
...
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
server$ env | grep LANG
LANG=C
server$ grep -in lang /etc/profile ~/.bash_profile ~/.bash_login ~/.profile ~/.bash_logout ~/.bashrc
grep: ~/.bash_profile: No such file or directory
grep: ~/.bash_login: No such file or directory
server$ locale -a
C
C.UTF-8
POSIX
en_US.utf8
server$ sudo sshd -T | grep acceptenv
acceptenv LANG
acceptenv LC_*
Итак, ssh утверждает, что отправляет LANG , sshd утверждает, что принимает LANG , а LANG не устанавливается ни в одном из файлов запуска / завершения работы bash .
Я знаю, что мог бы "исправить" это с помощью параметра в ~/.profile или что-нибудь подобное, но меня больше интересует, почему среда не проходит должным образом.
Редактировать:
Я только что заметил, что имя LANG отличается в macOS и Debian. Это все еще не работает, однако:
client$ LANG=en_US.utf8 ssh -v server
...
debug1: Sending environment.
debug1: Sending env LANG = en_US.utf8
server$ env | grep LANG
LANG=C
Изменить 2:
Оказывается, эта разница в именах не является проблемой Mac-vs-Linux. locale -a сообщает другое имя для локали, чем используется $LANG . Я не удосужился выяснить, почему.
