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 [email protected] > with a subject of "unsubscribe". Trouble? Contact [email protected] > -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected]

