/etc/profile
방금 설치한 응용 프로그램을 지원하기 위해 Solaris 10 UNIX 서버의 파일 에 다음 명령을 추가하라는 요청을 받았습니다 .
LC_ALL=en_US.UTF-8; export LC_ALL
그 결과 현재 정의되지 않은 서버의 "로케일"이 변경됩니다(기본값은 "C").
내 질문: 이렇게 변경하면 안 되는 이유가 있나요?
대안으로 변수를 내보내고 애플리케이션을 실행한 다음 다시 "설정 해제"하는 스크립트를 작성하는 것을 상상할 수 있습니다. 나는 이것을 하는 것에 신경쓰지 않지만 그러한 변화의 의미를 실제로 이해하지 못합니다.
/etc/default/init
또한 파일에도 동일한 변경이 이루어질 수 있다는 것을 배웠습니다 . 이것이 더 나은 해결책일까요?
답변1
LC_ALL
다른 모든 환경 설정보다 성능이 뛰어납니다. 이 설정을 시스템 전체에서 설정하지 않는 것이 좋습니다. 이는 다른 설정을 사용하려는 모든 애플리케이션이나 사용자가 먼저 해당 설정을 해제해야 함을 의미하기 때문입니다 LC_ALL
.
대신, 애플리케이션에 특정 로캘이 필요한 경우 래퍼 스크립트를 통해 실행하세요.
#!/bin/sh
LC_ALL=en_US.UTF-8 exec /path/to/application "$@"
답변2
UTF-8
로케일보다 더 나은 선택이며 POSIX
실제로는 이제 기본 Solaris 11 코드 세트입니다.
와 호환되므로 사용하는데 문제는 없을 것 같습니다 ASCII
.
의 경우 en_US
다음 명령에 표시된 대로 문자 순서나 날짜 표시 방법과 같은 미묘한 차이가 있습니다.
$ export LC_ALL=C
$ date
Wed Aug 28 01:21:55 CEST 2013
$ printf "a\nb\nA\nB\nC\n" | sort
A
B
C
a
b
$ LC_ALL=en_US.UTF-8
$ date
Wednesday, August 28, 2013 01:21:58 AM CEST
$ printf "a\nb\nA\nB\nC\n" | sort
a
A
b
B
C
제공된 모든 로캘이 물론 지원되므로 이는 시스템 소프트웨어에 영향을 미치지 않습니다.
엄격한 동작이 필요한 POSIX
애플리케이션은 또는 LC_ALL
로 설정해야 합니다 .C
POSIX
변경 사항을 구현할 위치에 관해서는 , 및 /etc/default/init
뿐만 아니라 각 프로세스의 기본 로케일을 설정하는 파일을 편집하는 것이 더 나은 접근 방식입니다 . sh
ksh
bash
zsh