Я использую сервер 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
. Я не удосужился выяснить, почему.