AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 503110
Accepted
tripleee
tripleee
Asked: 2019-02-27 03:09:47 +0800 CST2019-02-27 03:09:47 +0800 CST 2019-02-27 03:09:47 +0800 CST

Valores válidos para LC_CTYPE?

  • 772

Encontrei várias perguntas em vários fóruns em que usuários de Mac reclamam de localeerros ao fazer login em sistemas Linux por SSH, reclamando que a LC_CTYPE=UTF-8configuraçã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_CTYPEprecisa ser definido para uma localidade válida (às vezes você pode corrigir isso localegencomo administrador no sistema Linux), mas UTF-8nã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 localeconfigurações.

linux osx
  • 2 2 respostas
  • 2900 Views

2 respostas

  • Voted
  1. Keith W.
    2021-02-04T02:15:18+08:002021-02-04T02:15:18+08:00

    Não entrei nos detalhes de quem está "certo ou errado" - mas fiquei igualmente incomodado com o problema. Algumas soluções para isso:

    • Lado do servidor:
      • alterar/desativar AcceptEnv LC_*em/etc/ssh/sshd
        • contras: ele os define para o padrão do sistema
      • editar.profile
        • contras: usuário único
      • editar /etc/bash*ou/etc/profile
        • contras: pode ser revertido em atualizações
    • Lado do cliente:
      • alias ssh="LC_CTYPE=\"${LANG}\" ssh"em .bashrc/// .profileonde sempre
        • contras: usuário único
      • igual ao lado do servidor em .bashrc/ .profile...
      • alterar/adicionar configurações no Terminal
        • contra: sessão inteira, seja local ou remota

    Então, no final, acabei criando mac-locale-fix.shno /etc/profile.dservidor (raspian no meu caso) com esta linha:

    [ "A${LC_CTYPE}" == "AUTF-8" ] && export LC_CTYPE="${LANG}"
    

    Espero que isso ajude os outros...

    • 3
  2. Best Answer
    Thomas Dickey
    2021-02-08T05:11:43+08:002021-02-08T05:11:43+08:00

    A questão básica é

    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?

    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:

    [XSI] Se o valor de localidade tiver o formato:

    language[_territory][.codeset]
    

    refere-se a uma localidade fornecida pela implementação, em que as configurações de idioma, território e conjunto de códigos são definidas pela implementação .

    LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERICe LC_TIMEsão definidos para aceitar um modificador de campo @ adicional, que permite ao usuário selecionar uma instância específica de dados de localização dentro de uma única categoria (por exemplo, para selecionar o dicionário em oposição à ordenação de caracteres dos dados). A sintaxe para essas variáveis ​​de ambiente é assim definida como:

    [language[_territory][.codeset][@modifier]]
    

    Por exemplo, se um usuário quiser interagir com o sistema em francês, mas precisar classificar arquivos de texto em alemão, LANG e LC_COLLATE podem ser definidos como:

    LANG=Fr_FR
    LC_COLLATE=De_DE
    

    Isso pode ser estendido para selecionar o agrupamento do dicionário (digamos) pelo uso do campo modificador @; por exemplo:

    LC_COLLATE=De_DE@dict
    

    Uma implementação pode suportar outros formatos.

    Se o valor de localidade não for reconhecido pela implementação, o comportamento não será especificado.

    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".

    • 2

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve