
コードは言葉よりも大きく話します。
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と一緒に(ほぼ?)ある時点でこれが起こり始めました。私はそれらがすべてUbuntu 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
だから私がしなければならないことは、すべてのための2番目のフィールドを生成することです。基本的に私がしたことは次のとおりです。
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%確信できないので、これに対するコメントを歓迎します。