Направить цветной вывод команды в команду less

У меня есть следующая функция для печати цветного вывода из команды:

faketty () {
            script -qfec "$(printf "%s " "$@")" > out; less -r out; rm out;
}

Я не могу направить цветной вывод команды script непосредственно в less -r, потому что форматирование искажается. Сохранение в файл, как показано, работает. Интересно, могу ли я избавиться от необходимости сохранять в файл.

ОБНОВЛЕНИЕ: у меня меньше версия 481 (регулярные выражения GNU).


person StevieD    schedule 27.03.2019    source источник
comment
Кстати, "$(printf "%s " "$@")" совпадает с "$*".   -  person John Kugelman    schedule 27.03.2019
comment
less -R работает лучше?   -  person John Kugelman    schedule 27.03.2019
comment
Нет, тот же результат с заглавной буквой R   -  person StevieD    schedule 27.03.2019
comment
И исходная команда faketty cheat <command>. Для справки см. github.com/cheat/cheat/issues/451.   -  person StevieD    schedule 27.03.2019
comment
Используйте s для сохранения переданного вывода в файл, затем diff для рабочего файла. Что изменилось?   -  person John Kugelman    schedule 27.03.2019
comment
с? Это вариант? Я не вижу в этом варианта для script или less. На самом деле, это вариант для less, но он избавляет от пустых строк.   -  person StevieD    schedule 27.03.2019
comment
О, это заглавная S? Для прерывания длинных очередей?   -  person StevieD    schedule 27.03.2019
comment
Ключ внутри less: s filename - Сохранить ввод в файл. Это работает только в том случае, если ввод является каналом, а не обычным файлом.   -  person John Kugelman    schedule 27.03.2019
comment
Хорошо, s ‹file› дал мне текстовый файл с экранированными цветовыми кодами. Позвольте мне увидеть, чем это отличается от передачи вывода скрипта непосредственно в файл.   -  person StevieD    schedule 27.03.2019
comment
Интересно. Визуально они выглядят одинаково. Те же escape-коды. И когда я открываю файл, созданный с помощью s с less -r, он выглядит чистым.   -  person StevieD    schedule 27.03.2019
comment
Что, если вы нажмете Ctrl-L, чтобы перерисовать экран меньше? Это делает его лучше?   -  person John Kugelman    schedule 27.03.2019
comment
Интересно. Я пробовал это раньше, и это ничего не делало. На этот раз, однако, я нажал клавишу возврата после выполнения ^L, и форматирование прояснилось.   -  person StevieD    schedule 27.03.2019
comment
Единственная проблема заключается в том, что после того, как я нажму «Возврат», застревает меньше. Прокрутка с помощью j и k не работает.   -  person StevieD    schedule 27.03.2019
comment
На самом деле, если я нажимаю return после каждого выполнения j или k, он будет прокручиваться вверх и вниз на одну строку.   -  person StevieD    schedule 27.03.2019
comment
less -R будет вести себя лучше.   -  person John Kugelman    schedule 27.03.2019
comment
Я не вижу никакой разницы.   -  person StevieD    schedule 27.03.2019
comment
Ого, немного повозился со сценарием. Теперь ^L возвращает все в норму. Становимся ближе.   -  person StevieD    schedule 27.03.2019
comment
Интересно. Когда у меня есть оболочка var LESSCHARSET=utf-8 ^L снова ломается.   -  person StevieD    schedule 27.03.2019
comment
Понятно. Иисус. После множества проб и ошибок я понял, как заставить экран очищаться самостоятельно: faketty cheat $1 $2 | less +Gg -r сделал свое дело. По сути, +Gg перемещает экран вниз, а затем обратно вверх. По какой-то причине это устраняет беспорядок.   -  person StevieD    schedule 27.03.2019


Ответы (1)


Не знаю, почему это работает, но это работает:

faketty () {
            script -qfec "$(printf "%s " "$@")" dev/null;
}

faketty cheat $1 $2 | less +Gg -r;

Перемещение трубы за пределы функции помогло по какой-то причине. Однако мне все же пришлось нажать ^L, чтобы навести порядок. +Gg перемещает файл в последнюю строку, а затем в первую строку. Это каким-то образом «очищает» форматирование без необходимости нажимать ^L.

person StevieD    schedule 27.03.2019