Я пытаюсь обнаружить текущую кодировку символов gnome-terminal из командной строки. Я попытался использовать gconftool:
$ gconftool-2 --get /apps/gnome-terminal/profiles/Default/encoding
current
$ gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/encoding
en_US.UTF-8
$ gconftool-2 --get /apps/gnome-terminal/profiles/Default/encoding
en_US.UTF-8
Но если я сейчас перейду в меню gnome-terminal и выберем Terminal->Set Character Encoding->ISO-8859-10, а затем снова запустите
$ gconftool-2 --get /apps/gnome-terminal/profiles/Default/encoding
en_US.UTF-8
, чтобы кодирование в /apps/gnome-terminal/profiles/Default/encoding не изменилось на ISO-8859-10, даже если терминал использует эту кодировку. Таким образом, кажется, что gconftool не может использоваться для определения текущей кодировки.
Вот полурешение, обращаясь к проблеме определения кодировки, когда /apps/gnome-terminal/profiles/Default/encoding равно строке current. Предполагая, что строка current означает, что gnome-terminal должен использовать текущую локаль.
Заманчиво проверить переменную LANG, чтобы определить кодировку, но в соответствии с этим вопросом это не является надежным. Вместо этого следует использовать модуль Perl I18N::Langinfo:
temp=$(gconftool-2 --get /apps/gnome-terminal/profiles/Default/encoding)
if [[ $temp == "current" ]] ; then
perl -MI18N::Langinfo=langinfo,CODESET -E 'say langinfo(CODESET())'
else
echo $temp
fi
Обратите внимание, что этот ответ не затрагивает проблему определения кодировки gnome-terminal, когда пользователь вручную изменяет кодировку из меню gnome-terminal .