코드는 말보다 더 크게 말합니다.
root@myhost # locale-gen
Generating locales (this might take a while)...
(여기서 조금 건너뛰세요)
error: Bad entry 'en_GB '
en_GB.UTF-8... done
(여기서 조금 건너뛰세요)
en_SG.UTF-8... done
error: Bad entry 'en_US '
en_US.ISO-8859-1... done
en_US.UTF-8... done
error: Bad entry 'en_US.iso88591 '
error: Bad entry 'en_US.iso885915 '
en_ZA.UTF-8... done
(여기서 조금 건너뛰세요)
Generation complete.
이러한 오류가 발생하는 이유와 이를 방지하는 방법은 무엇입니까?
노트:
- 저는 Linux Mint 18.2를 사용하고 있지만 Mint 18.1과 함께 (거의?) 어느 시점부터 이런 일이 발생하기 시작했습니다. 나는 그것들이 모두 우분투 16.04를 기반으로 한다고 생각합니다.
- ; 아래에서 이러한 "잘못된 항목"(끝에 추가 공백이 있거나 없음)이 포함된 파일을 찾지 못했습니다
/etc
. 구체적으로/etc/locale.gen
.
추가 정보:
관련 정보 /etc/locale.gen
:
# grep -v "#" /etc/locale.gen | sed "s/$/+/" | grep "en_"
en_GB.UTF-8 UTF-8+
en_US ISO-8859-1+
en_US.UTF-8 UTF-8+
답변1
locale-gen
(잘 작성되지 않은) bash
스크립트입니다. 이 버그는 다음에 의해 보고되었습니다:
is_entry_ok() {
if [ -n "$locale" -a -n "$charset" ] ; then
true
else
echo "error: Bad entry '$locale $charset'"
false
fi
}
따라서 여기서 질문은 $charset
비어 있습니다.
생성될 로케일 목록은 /etc/locale.gen
에서 가져 옵니다 /var/lib/locales/supported.d
.
파일 자체에 en_US
문자 세트 이름이 포함되어 있지 않을 수도 있습니다.
/etc/locale.gen
그렇지 않기 때문에 en_SG.UTF-8
에 파일이 있을 가능성이 높으며 /var/lib/locale/supported.d
해당 파일에는 잘못된 줄이 있을 수 있습니다. 범인을 식별하면 dpkg -S
해당 경로에서 해당 범인이 어떤 패키지에서 왔는지 확인할 수 있습니다(있는 경우).
답변2
편집: 이 해결 방법은 최선의 해결책은 아니지만 작동합니다.
@StephaneChazelas를 기반으로 함답변, 나는 문제가 /var/lib/locales/supported.d/mintlocale
내 배포판인 Linux Mint와 관련된 파일이라는 것을 발견했습니다. 잘못 생성되었습니다. 대부분의 (전부는 아님) 줄에 charset 필드가 없습니다. 예를 들면 다음과 같습니다.
en_GB
en_GB.iso88591
en_GB.UTF-8 UTF-8
(뛰어 넘다)
en_US
en_US.iso88591
en_US.iso885915
en_US.UTF-8 UTF-8
그래서 내가 해야 할 일은 모든 것에 대한 두 번째 필드를 생성하는 것입니다. 기본적으로 제가 한 일은 다음과 같습니다.
sed -i -r '/^[a-zA-Z_]*$/d' mintlocale
sed -i -r 's/.([^. ]+)$/.\1 \1/' mintlocale
sed -i -r 's/ iso8859([0-9]+)$/ISO-8859-\1/' mintlocale
따라서 .charset 접미사가 없는 줄을 제거하고 공백 뒤에 .charset 접미사를 복사한 다음 ISO 8859 문자 집합 형식을 콘텐츠와 일치하도록 변경합니다 /usr/shared/i18n/charmaps/
(그렇지 않으면 다른 오류가 발생합니다).
locale-gen
결국 오류 없이 다시 실행했습니다 .
노트:문자 집합이 없는 줄을 제거하는 것에 대해 100% 확신할 수 없으므로 이에 대한 의견을 환영합니다.