Re: Временная смена локали в shell-скрипте
On 2009.06.17 at 11:10:11 +0400, Andrey Zhidenkov wrote:
> Снова добрый день.
>
> Возникли проблемы с кодировкой в sqlplus для linux, решил написать на shell скрипт,
> который бы делал следующее:
>
> 1. Сохранял текущую локаль
Это лишнее.
> 2. Менял локаль на CP1251
> 3. Запускал sqlplus
> 4. После завершения sqlplus восстанавливал бы значения для локали.
Это тоже лишнее.
Локаль - это свойство процесса. Поэтому по завершении скрипта, когда мы вернемся
в исходный шелл, у него останется та же локаль, которая была.
Вообще, говоря, шелл имеет специальный синтаксис для установки
переменной окружения для одной команды.
ИМЯ_ПЕРЕМЕННОЙ=значение команда
Т.е. поставленная задача решается без всякого скрипта одной командой
LANG=ru_RU.CP1251 sqlplus
Правда, есть одно маленькое но - вероятно, хочется вместе с локалью
поменять и шрифт, которым отображается вывод SQL-plus, а также еще и то,
как эмулятор терминала интерпретирует вводимые с клавиатуры русские
буквы. Первое можно очень легко сделать, выдав соответствующую
esc-последовательность, со вторым посложнее - надо менять локаль
процесса эмулятора терминала.
Впрочем, если эмулятор терминала правильно настроен, он сам сообразит,
какие шрифты использовать, в зависимости от локали.
Поэтому можно запустить LANG=ru_RU.CP1251 xterm -e sqlplus - при этом
будет открыто новое окно xterm, в котором будет правильно
интерпретироваться ввод русских букв, и, при правильной настройке
русские буквы будут правильно отображаться, и внутри сразу запущен
sqlplus.
Но вообще-то если sqlplus это от Oracle, мне как-то странно, что он
плохо себя ведет с кодировками. Помнится, еще в oracle 8.0 он прекрасно
умел работать в любых локалях. Только ему нужно было установить помимо
LANG, еще и Oracle-специфичную переменную NLS_LANG, по структуре такую
же, но с названиями языков, регионов и кодировок принятых в oracle.
Что-то вроде NLS_LANG=RUSSIAN_CIS.CL8KOI8R для кодировки KOI8-R
У меня в те времена был даже в ~/.profile написан case, который в
зависимости от текущего LANG выставлял правильные NLS_LANG и
PG_CLIENTENCODING. В utf-8 локали это тоже прекрасно работало, по крайне
мере в Oracle 8i.
> Допустим, как реализовать 2-3, я догадываюсь, но как осуществить пп. 1 и 4?
>
>
> --
> To UNSUBSCRIBE, email to debian-russian-REQUEST@lists.debian.org
> with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
>
Reply to: