LINUX.ORG.RU

Сообщения Betanuzir

 

luit перекодирует cp1251 в что-то не то

Система: Fedora 16 x86_64

Возникла необходимость поработать в интерактивной утилите в консоли. Проблема в том, что утилита выводит в cp1251, а в консоли используется utf8. Соответственно вся кириллица при работе с утилитой становится нечитаемой.
Для решения проблемы решил запустить утилиту через luit. Теперь вместо кириллицы выводятся не белые знаки вопроса в чёрных шестиугольниках, а вполне читаемые символы... но латинские. И подбираемые по какой-то непонятной закономерности, на транслит не похоже. Например, пытаюсь через luit открыть в less файл, в котором сохранён кириллический текст в cp1251:

LANG=ru_RU.cp1251 luit less test.txt
и вижу следующее
j`j`ÿ-rn jhphkkhweqj`ÿ m`dohq|
Аналогичная картина наблюдалась, когда вызывал luit с ключом -encoding:
luit -encoding cp1251 less test.txt
Соответствующая локаль в системе стоит:
$ locale -a | egrep '.*ru.*1251.*'
ru_RU.cp1251
При попытке конвертировать тот-же файл через iconv выводится правильный кириллический текст:
$ iconv -f cp1251 test.txt
какая-то кириллическая надпись
Установленная локаль в консоли:
$ locale
LANG=ru_RU.utf8
LC_CTYPE="ru_RU.utf8"
LC_NUMERIC="ru_RU.utf8"
LC_TIME="ru_RU.utf8"
LC_COLLATE="ru_RU.utf8"
LC_MONETARY="ru_RU.utf8"
LC_MESSAGES="ru_RU.utf8"
LC_PAPER="ru_RU.utf8"
LC_NAME="ru_RU.utf8"
LC_ADDRESS="ru_RU.utf8"
LC_TELEPHONE="ru_RU.utf8"
LC_MEASUREMENT="ru_RU.utf8"
LC_IDENTIFICATION="ru_RU.utf8"
LC_ALL=
ЧЯДНТ?

Betanuzir
()

Проблемы с /usr на отдельном разделе?

Задумался над тем, чтобы вынести /usr на отдельный XFS-раздел - вроде как на чтение XFS пошустрее, чем ext4 будет. А писать в /usr много и не надо (ну кроме /usr/portage, но ему я свой ext4-раздел выкроить собираюсь). Загуглил на тему, что может принести /usr на отдельном разделе и нарыл вот это вот. С другой стороны по результатам гуглинга сложилось впечатление, что с /usr на отдельном разделе живёт не так уж мало народа, не только суровые олдфаги, привыкшие обходится без D-Bus, CUPS, ALSA, PulseAudio и прочих буржуазных излишеств. Насколько вообще распространены проблемы, описанные по ссылке? Реально их словить на генте? Или это удел избранных «счастливчиков»? Может есть какие-то решения для них?

Betanuzir
()

[sed] Проблема при извлечении подстроки через regexp

Доброго времени суток! Есть строка вида: kljfhgdfjk ; lfjkghdjkfgh && klfh&kdfgh Пытаюсь sed-ом вытащить кусок строки идущий после последнего «&&» или ";" (смотря, что ближе к концу строки расположено). Делаю так:

echo 'kljfhgdfjk ; lfjkghdjkfgh && klfh&kdfgh' | sed -n 's/.*\(&&|;\)\ *\([^&{2},^;]*\)\ *$/\2/p'
Однако сия изящная конструкция ничего не возвращает. Даже ошибок. Пробовал последовательно упрощать регулярное выражение. Заработало следующее:
echo 'kljfhgdfjk ; lfjkghdjkfgh && klfh&kdfgh' | sed -n 's/.*&&\ *\([^&{2},^;]*\)/\1/p'
Возвращает, как и ожидается, «klfh&kdfgh», но в практических целях сия изящная конструкция непригодна, т.к. не охватывается вариант, когда после «&&» в строке есть ещё ";". Почему sed ничего не возвращает, если вместо «&&» в регулярном выражении поставить «\(&&|;\)» и заменять строку на вторую подгруппу вместо первой, неясно. Кроме того, непонятно, чем не нравится «\ *$», отсекающая пробелы в конце строки, в самом конце регулярного выражения. Что я делаю не так?

 

Betanuzir
()

[BASH] Выделить название команды из строки

Доброго времени суток! В BASH-скрипте принимаю в качестве опции команду с параметрами, которая в ходе скрипта будет выполнена. При этом будет измерено время выполнения этой команды, результат её выполнения и т.д. До того, как эта команда будет выполнена, она хранится в виде строки в переменной. Соответственно, выполняться она будет путём скармливания этой строки в eval. Нужно из этой строки выделить название команды, отбросив параметры. Поясню на примере:

JOB_COMMAND=
PARSED_ARGS=`getopt -o c: -l command: -- "$@"`
eval set -- "$PARSED_ARGS"
while true ; do
	case "$1" in
		#вот тут в JOB_COMMAND ложится например строка '"some command" fst_param sec_param'
		-c|--command) JOB_COMMAND="$2" ; shift 2 ;;
		--) shift ; break ;;
		*) echo "Options parsing error" ; exit 1 ;;
	esac
done

#вот тут надо из JOB_COMMAND выделить 'some command', отбросив при этом fst_param sec_param
????????
#PROFIT!!!
Как это сделать, если в названии команды нет пробелов, я представляю: всё, что от начала строки до первого пробела, и есть название команды. Реализуется соответственно при помощи простого и изящного перлового регэкспа /^(\S+)\s*/. Можно наверно и при помощи POSIXового регэскпа сделать, только сходу не могу представить, какой там регэксп нужен будет, опыта маловато. А вот какой POSIXовый регэксп (перловый тут уже не покатит, ибо запускаться скрипт вполне возможно будет на машинах без установленного перла) нужен будет, если в названии команды есть пробелы, заэкранированные бэкслэшем или выделением названия команды кавычками, я что-то никак представить не могу?

 

Betanuzir
()

Как собрать OpenOffice 3.1.1?

Собственно интересует, как осуществить сабж на Slackware 12.2? Где взять сырцы (облазил весь openoffice.org - не нашёл)? Как собирать? Есть ли какой-нить мануал по сборке (здесь, на LORе, нашёл только для второго опенофиса)? Есть ли какая-то специфика, связанная с дистрибутивом, на котором производится сборка?

Betanuzir
()

Тормоза при первом монтировании CD

На свежеустановленной Slackware64 13.0 первое монтирование CD/DVD-диска длится слишко долго (примерно секунд 30). При этом в dmesg сыпется следующее:

hda: cdrom_decode_status: status=0x51 { DriveReady SeekComplete Error } hda: cdrom_decode_status: error=0x44 <3>{ AbortedCommand LastFailedSense=0x04 } ide: failed opcode was: unknown hda: cdrom_decode_status: status=0x51 { DriveReady SeekComplete Error } hda: cdrom_decode_status: error=0x44 <3>{ AbortedCommand LastFailedSense=0x04 } ide: failed opcode was: unknown hda: cdrom_decode_status: status=0x51 { DriveReady SeekComplete Error } hda: cdrom_decode_status: error=0x44 <3>{ AbortedCommand LastFailedSense=0x04 } ide: failed opcode was: unknown hda: cdrom_decode_status: status=0x51 { DriveReady SeekComplete Error } hda: cdrom_decode_status: error=0x44 <3>{ AbortedCommand LastFailedSense=0x04 } ide: failed opcode was: unknown hda: DMA disabled hda: ATAPI reset complete ISO 9660 Extensions: Microsoft Joliet Level 3 ISO 9660 Extensions: RRIP_1991A

В /var/log/messages при вызове mount /mnt/cdrom упало следующее:

Dec 3 21:28:36 mylair kernel: hda: DMA disabled

Если размонтировать и смонтировать снова, монтируется без задержек. После перезагрузки история повторяется. Если при загрузке ОС диск находится в приводе аналогичные тормоза случаются в процессе загрузки. Что это может быть и как оно лечится?

Betanuzir
()

Не запускаются bash-скрпиты

На свежеустановленной Slackware64 13.0 в консоли bash-скрипты не запускаются «напрямую», только с указание оболочки:

# /bin/sh somescript.sh
работает
# somescript.sh
не работает, пишет, что нету такой команды. Права на запуск выставлены. В начале скрипты написано
#!/bin/sh
Что не так?

Betanuzir
()

Дрожит изображение в консоли

На свежеустановленной Slackware64 13.0 в консоли (иксы вообще ещё не ставил) дрожит изображение, особенно ближе к краям экрана. Дрожит не сильно, но на глаза давит. Монитор - CRT-шный 17" Samsung SyncMaster 765MB (да-да, вот на таком раритете приходится работать :), видео - ATI Radeon 4670 512Мб. В винде (стоит второй системой) этой "дрожи" нет. Так что дело видимо всё же не в железе. В чём проблема и как её решить?

Betanuzir
()

[bash] stderr в переменную

Есть утилита time (не путать с bash-евской командой time), которая запускает переданную ей команду, а потом валит данные (время выполнения, например) по выполнению этой команды в stderr:

~$ /usr/bin/time -f %e sleep 5
5.00

Как можно сохранить эти данные со стандартного потока ошибок в переменную?

 

Betanuzir
()

Сменить сочетание клавиш переключения раскладки в консоли

Русифицировал Slackware 12.2, как написано тут. В результате в консоли раскладка переключается по правому Alt. Как изменить это сочетание клавишь например на Alt+Shift?

Betanuzir
()

Странности со screen

Решил применить в хозяйственной деятельности такую полезную на вид штукенцию, как screen. Попробовал использовать её в консоли - понравилось, хоть и требует мелких доработок напильником. А потом попробовал использовать её в иксовом эмуляторе терминала (в моём случае Terminal в xfce4). Вот тут-то и начались странности. А именно, первое, что бросилось в глаза - Backspace перестал работать. Пытаясь понять причину столь мешающего в нормальной консольной жизнедеятельности недуга, решил посмотреть $TERM. Ситуация в некоторой степени прояснилась, а в некоторой - даже запуталась. В консоли echo $TERM возвращала linux. В screen та же echo $TERM возвращала screen.linux. Что за screen.linux - нипаняяятна... Тем более, что в /etc/termcap такой зверь не значится. Ну хорошо, едем дальше. Повторяю те же манипуляции в иксовом эмуляторе консоли. Без screen echo $TERM вернула xterm. Из-под screen в этом случае echo $TERM вернула screen, которого впрочем в /etc/termcap тоже нету. Решив, что нашёл корень проблемы, я попытался перебить значение $TERM на xterm, потом на screen.xterm, потом на screen.linux, а потом на linux. Делал это как напрямую, через export TERM=... , так и через tset. Эффекта никакого не заметил - Backspace как не работал в screen, так и продолжал не работать. Собственно по результатам всех этих экспериментов возник ряд вопросов:

1. Что за левые значения $TERM - screen.linux и screen - возвращались?
2. Почему их нет в /etc/termcap?
3. Почему tset нормально принимал несуществующие в termcap screen и screen.linux и ругался на точно так же не значащийся там screen.xterm, который я пытался ему скормить?
4. Откуда вообще взялись эти типы терминалов в screen, если в man screen написано, что screen эмулирует только vt100, и ничего кроме vt100?
5. Как таки заставить работать эмулятор терминала в screen нормально, в частности заставить нормально работать Backspace?

Betanuzir
()

Проблемы с $PATH при использовании sudo

При выполнении команд через sudo переменная окружения $PATH остаётся такой же, как у пользователя, вызвавшего sudo. В результате например для запуска программ из s-директорий (/sbin/ и т.д.) приходится их вызывать через полный путь, что неудобно. Можно как-то сделать, чтобы при выполнении команд через sudo $PATH и остальные переменные окружения (их не проверял, но есть подозрение, что они тоже остаются как у рядового пользователя, вызвавшего sudo) выставлялись как у root-а? В man sudo и man sudoers смотрел, гуглил, но решения так и не нашёл.

Betanuzir
()

[xfce4] Как изменить приглашение командной строки в Terminal?

В xfce4 по умолчанию в Terminal у меня стоит приглашение командной строки вида bash-3.1$. Как его можно поменять? Хочу сделать приглашение как в настоящей консоли вида <имя пользователя>@<имя хоста>:<текущая директория>$.

Betanuzir
()

Зачем группа cdrom в Slackware 12.2

Зачем нужна группа cdrom? При добавлении пользователя в неё он всё равно не может монтировать CD-диски, хотя на соответствующее устройство в /dev/ права этой группе даны. А если в fstab для CD-привода добавить опцию user вместо owner, которая там прописана изначально, то пользователь сможет монтировать устройство и не входя группу cdrom.

Betanuzir
()

Ошибки при работе xfce 4.4.3 на Slackware 12.2

После выхода из иксов в консоль наблюдаю следующие сообщения об ошибках:

(xfce4-session:3374): GLib-GObject-CRITICAL **: g_object_unref: assertion 'G_IS_OBJECT (object)' failed

waiting for xserver to shut down xfce-mcs-manager: Fatal IO error 11 (Ресурс временно недоступен) on X server :0.0.

FreeFontPath: FPE "/usr/share/fonts/misc" refcount is 2; should be 1; fixing.
Жить не мешает (пока?), но всё равно непорядок. С чем это связано и как с этим бороться?

Betanuzir
()

RSS подписка на новые темы