Написал такую программу:
#! /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 проблем-то нет...