문제 mac os 에서 기본 bash 를 사용하고 있었고, 원격 서버로 ssh 접속했을 때, ssh 상에서 한글 표시가 문제 없었다.
그런데 zsh 를 쓰고 원격 서버로 ssh 접속하니, 한글 표시가 문제가 되었다.
여기서 원격 서버는 bash 사용중.
작업 내용 결국 locale 설정 문제다. mac os 에서 locale 확인:
LANG="ko_KR.UTF-8" LC_COLLATE="ko_KR.UTF-8" LC_CTYPE="ko_KR.UTF-8" LC_MESSAGES="ko_KR.UTF-8" LC_MONETARY="ko_KR.UTF-8" LC_NUMERIC="ko_KR.UTF-8" LC_TIME="ko_KR.UTF-8" LC_ALL=
bash -> 원격 서버 접속 후 locale 확인:
LANG=en_US.UTF-8 LANGUAGE= LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=
zsh -> 원격 서버 접속 후 locale 확인:
locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory LANG=en_US.UTF-8 LANGUAGE= LC_CTYPE=ko_KR.UTF-8 LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=
원격 서버에서 아래와 같이 입력하면 이슈는 해결된다.
$ sudo locale-gen "ko_KR.UTF-8"
다시 locale 확인해보면~
LANG=en_US.UTF-8 LANGUAGE= LC_CTYPE=ko_KR.UTF-8 LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=
LC_CTYPE 이 ko_KR.UTF-8 로 설정되고, ssh 에서 한글 사용이 자유롭게 되는것을 볼 수 있다.
원인 분석 일단 LC_CTYPE 이게 뭔가?
gnu 정의 보면..
This category applies to classification and conversion of characters, and to multibyte and wide characters;
conversion 에 관여하는 항목이라고 보인다.
아직 정확히 파악은 안되었지만, ssh 통해서 지원하지 않는 locale 이 나타났을때 LC_CTYPE 기준으로 conversion 이 이루어진다고 보인다.
bash 는 뭔가 능숙히 터널링이 되었고, zsh 는 안되는건 안된다라고 표현한듯…