Encontrei várias perguntas em vários fóruns em que usuários de Mac reclamam de locale
erros ao fazer login em sistemas Linux por SSH, reclamando que a LC_CTYPE=UTF-8
configuração está incorreta.
Com mais detalhes, o shell no MacOS parece definir esse valor e, em seguida, (se você tiver a opção ativada no Terminal ou etc.), suas LC_*
variáveis locais serão exportadas para o sistema remoto quando você usar o SSH.
O Linux insiste que LC_CTYPE
precisa ser definido para uma localidade válida (às vezes você pode corrigir isso localegen
como administrador no sistema Linux), mas UTF-8
não é uma localidade em primeiro lugar.
Minha pergunta principal é, isso é um bug no MacOS? Ou o Linux está errado ao insistir que a variável precisa ser definida para um nome de localidade totalmente especificado?
Secundariamente, para poder argumentar qual é a correta e por quê, onde isso é especificado?
Em terceiro lugar, há algo que esses usuários de Mac (inclusive eu) poderiam ou deveriam fazer diferente?
A solução óbvia é colocar algo como
LC_CTYPE=en_US.UTF-8
no seu .bash_profile
, mas isso obviamente só resolve para sua conta pessoal e codifica um valor que pode ou não concordar com suas outras locale
configurações.
Não entrei nos detalhes de quem está "certo ou errado" - mas fiquei igualmente incomodado com o problema. Algumas soluções para isso:
AcceptEnv LC_*
em/etc/ssh/sshd
.profile
/etc/bash*
ou/etc/profile
alias ssh="LC_CTYPE=\"${LANG}\" ssh"
em.bashrc
///.profile
onde sempre.bashrc
/.profile
...Então, no final, acabei criando
mac-locale-fix.sh
no/etc/profile.d
servidor (raspian no meu caso) com esta linha:Espero que isso ajude os outros...
A questão básica é
e a página POSIX para variáveis de ambiente mostra o motivo pelo qual outras pessoas veem a configuração do macOS como incorreta:
Ou seja, eles assumem que POSIX prescreve uma sintaxe para as configurações de localidade. Um leitor desavisado assumiria que o POSIX define as formas permitidas para as variáveis de ambiente para que o valor do conjunto de código seja opcional e não aja como um substituto para a linguagem . Mas esse último "pode" abre uma lata de vermes, de fato abençoando essa diferença de interpretação. A Apple pode fazer o que quiser, se quiser fornecer localidades válidas que não sigam exatamente esse padrão.
@tripleee sugeriu que a página sobre Locale fornece informações melhores, mas isso é quase inteiramente uma discussão das definições de localidade, em vez de fornecer orientação para interoperabilidade (ou seja, o objetivo ostensivo do POSIX).
Nenhuma das páginas aborda as diferenças nas configurações de localidade disponíveis (como ".utf8" versus ".UTF-8"). Esses são dependentes da implementação, conforme observado na página POSIX. Isso deixa os usuários com a única solução de determinar por si mesmos quais configurações de localidade são suportadas nos sistemas local e remoto e (comportamento ssh aqui) determinar como definir essas configurações no sistema remoto "compatíveis".