LC_CTYPE의 유효한 값은 무엇입니까?

LC_CTYPE의 유효한 값은 무엇입니까?

localeMac 사용자가 SSH를 통해 Linux 시스템에 로그인할 때 오류에 대해 불평하고 LC_CTYPE=UTF-8잘못된 설정 에 대해 불평 하는 다양한 포럼에서 많은 질문을 발견했습니다 .

LC_*좀 더 자세히 설명하자면, MacOS의 셸은 이 값을 설정하는 것으로 나타나며 , SSH를 통해 로그인하면 (터미널 등에서 옵션을 활성화한 경우) 로컬 변수가 원격 시스템으로 내보내집니다.

LC_CTYPELinux는 유효한 로케일로 설정해야 한다고 주장 localegen하지만(때때로 Linux 시스템의 관리자로서 이를 수정할 수 있음) UTF-8애초에 로케일이 아닙니다.

내 거기초적인문제는 이것이 MacOS의 버그입니까?입니다. 아니면 변수가 완전히 지정된 로케일 이름으로 설정되어야 한다고 주장하는 Linux가 잘못된 것입니까?

둘째, 어느 것이 옳고 그 이유는 무엇인지 논쟁할 수 있도록 이것이 어디에 명시되어 있습니까?

셋째, Mac 사용자(나 자신 포함)가 다르게 할 수 있거나 다르게 해야 하는 것이 있습니까?

확실한 해결책은 다음과 같은 것을 배치하는 것입니다.

LC_CTYPE=en_US.UTF-8

하지만 이는 분명히 개인 계정의 문제만 해결하고 .bash_profile다른 설정과 일치할 수도 있고 일치하지 않을 수도 있는 값을 하드코딩할 뿐입니다.locale

답변1

나는 누가 "옳고 누가 그른지"에 대해 자세히 설명하지 않았지만 그 문제로 인해 똑같이 짜증이났습니다. 이에 대한 몇 가지 해결책은 다음과 같습니다.

  • 서비스 터미널:
    • 변경/ AcceptEnv LC_*비활성화/etc/ssh/sshd
      • 단점: 시스템 기본값으로 설정됩니다.
    • 편집하다.profile
      • 단점: 단일 사용자
    • 편집 /etc/bash*하거나/etc/profile
      • 단점: 업데이트로 되돌릴 수 있음
  • 고객:
    • alias ssh="LC_CTYPE=\"${LANG}\" ssh".bashrc// .profile어디든지
      • 단점: 단일 사용자
    • .bashrc/ .profile의 서버 측과 동일 ...
    • 터미널에서 설정 변경/추가
      • 단점: 로컬이든 원격이든 전체 세션

그래서 마침내 서버에 mac-locale-fix.sh다음 줄을 만들었습니다 /etc/profile.d(내 경우에는 raspian).

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

이것이 다른 사람들에게 도움이 되기를 바랍니다...

답변2

기본적인 질문은

내 주요 질문은 이것이 MacOS의 버그입니까?입니다. 아니면 변수가 완전히 지정된 로케일 이름으로 설정되어야 한다고 주장하는 Linux가 잘못된 것입니까?

그리고POSIX환경 변수 페이지는 다른 사람들이 macOS가 잘못 구성되었다고 생각하는 이유를 보여줍니다.

[XSI]만약에로케일 값의 형식은 다음과 같습니다.

language[_territory][.codeset]

언어, 지역 및 코드 세트에 대한 설정이 있는 구현에서 제공되는 로케일을 나타냅니다.구현 정의.

LC_COLLATE,LC_CTYPE,LC_MESSAGES,LC_MONETARY,LC_NUMERIC, 그리고LC_TIME@ 수정자를 사용하여 추가 필드를 허용하도록 정의됩니다. 이를 통해 사용자는 단일 범주 내에서 지역화된 데이터의 특정 인스턴스를 선택할 수 있습니다(예: 문자 종류의 데이터 대신 사전 선택). 이러한 환경 변수의 구문은 다음과 같이 정의됩니다.

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

예를 들어, 사용자가 프랑스어로 시스템과 상호 작용하고 싶지만 독일어 텍스트 파일을 정렬해야 하는 경우 LANG 및 LC_COLLATE를 다음과 같이 정의할 수 있습니다.

LANG=Fr_FR
LC_COLLATE=De_DE

예를 들어 @ 수정자 필드를 사용하여 사전 대조 선택으로 확장할 수 있습니다.

LC_COLLATE=De_DE@dict

구현은 다른 형식을 지원할 수도 있습니다.

구현이 로케일 값을 인식하지 못하는 경우 동작은 지정되지 않습니다.

즉, POSIX가 로케일 설정 구문을 지정한다고 가정합니다. 일반 독자는 POSIX가 허용되는 환경 변수 형식을 정의한다고 생각할 수 있습니다.코드 세트값은 선택사항이며 대체할 수 없습니다.언어. 그러나 마지막 "아마도"는 벌레의 캔을 열고 실제로 해석의 차이를 축복합니다. Apple이 이 패턴을 정확히 따르지 않는 유효한 로케일을 제공하려는 경우 원하는 것은 무엇이든 할 수 있습니다.

@tripleee가 이 페이지를 추천했습니다.로케일더 나은 정보를 제공하지만 이는 지침을 제공하기보다는 거의 전적으로 로케일 정의에 대한 논의입니다.상호 운용성(즉, POSIX의 표면적 목표입니다).

두 페이지 모두 사용 가능한 로케일(예: ".utf8" 대 ".UTF-8")의 차이점을 다루지 않습니다. POSIX 페이지에 명시된 대로 이는 구현에 따라 다릅니다. 이로 인해 사용자는 로컬 및 원격 시스템이 지원하는 로케일과 (여기서는 ssh 동작) 원격 시스템에서 이러한 설정을 "호환 가능하게" 설정하는 방법을 스스로 결정할 수 있는 유일한 솔루션을 남깁니다.

관련 정보