LINUX.ORG.RU

смена кодировки stderr и stdout на лету...

 , , , , konwert


0

4

Написал такую программу:

#! /bin/sh
iconv=«iconv -s -c -f koi8-r -t utf-8»
((env LC_ALL=ru_RU.KOI8-R stdbuf -oL -eL -i0 /usr/local/bin/glimpseindex -B -M 64 -n -o -s -t -w 1000 -z «$@» 3>&2 2>&1 1>&3 3>&- | stdbuf -i0 -oL -eL $iconv) 3>&2 2>&1 1>&3 3>&- | stdbuf -i0 -oL -eL $iconv) 

Короче, вывод в stdout и/или stderr идёт с дикой задержкой из-за буферизации. Но ведь я её отключил (?) через stdbuf.

Для чего это нужно: glimpse работает с 8-битными кодировками, но не работает с utf-8.

Вдогонку из bash-программирования:


#! /bin/sh
declare -a args
for x in «$@»; do
        args[${#args[@]}]=$(printf «%q» $(echo -nE «$x» | iconv -sc -f utf-8 -t koi8-r))
done
eval env LC_CTYPE=ru_RU.KOI8-R LANG=ru_RU.KOI8-R /usr/local/bin/glimpse -z -L20:20:5 «${args[@]}» | iconv -s -c -f koi8-r -t utf-8

Можно ли это упростить и переписать лучше? И здесь я про stderr забыл... Я знаю есть filterm из пакета konwert, но мне как-то не очевидно, как он будет работать, будь вывод переназначен не в терминал, а в файл (причём stdin и stderr в разные).

Вообще хотелось бы просто заставить glimpse работать на машине с utf-8 кодировкой. С KOI-8 проблем-то нет...


Но ведь я её отключил (?) через stdbuf.

Дак ведь ничего не мешает программе снова её включить. Не знаю, по мне, правильнее запускать программу через filterm или luit, чтобы программа видела, что она работает с терминалом и включала буферизацию. Может пропатчить filterm, чтобы он смотрел куда идёт stdout/stderr и, если оба не на терминал, запускал программу без эмулятора терминала.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.