Как сделать использовать «less -F» без «-X», но все равно отображать вывод, если только одна страница?

Это, скорее всего, sos, запущенное системой abrt - при обнаружении сбоя abrt захватывает sosreport с несколькими базовыми подключаемыми модулями, включенными для предоставления вместе с абрт отчет.

11
01.02.2019, 02:11
2 ответа

UPDATE

tl; dr Решение: обновить на менее 530

От http://www.greenwoodsoftware.com/less/news.530.html :

Не выводить последовательность инициализации терминала, если используется -F и файл подходит для одного экран.

Таким образом, с этим исправлением нам даже не нужно беспокоиться о том, использовать ли -X самостоятельно, меньше -F просто позаботится об этом.

PS. Некоторые другие менее конфиги, которые я использую:

export PAGER='less -F -S -R -M -i'
export MANPAGER='less -R -M -i +Gg'
git config --global core.pager 'less -F -S -R -i'
#alias less='less -F -S -R -M -i'

В конце концов я написал обертку самостоятельно.

#!/usr/local/bin/bash

# BSD/OSX compatibility
[[ $(type -p gsed) ]] && SED=$(type -p gsed) || SED=$(type -p sed)
CONTEXT=$(expand <&0)
[[ ${#CONTEXT} -eq 0 ]] && exit 0
CONTEXT_NONCOLOR=$( $SED -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" <<< "$CONTEXT")
LINE_COUNT=$( (fold -w $(tput cols) | wc -l) <<< "$CONTEXT_NONCOLOR" )

[[ $LINE_COUNT -ge $(tput lines) ]] && less -+X -+S -R <<< "$CONTEXT" || echo "$CONTEXT"

Пользователи BSD / OSX должны вручную установить gnu-sed . Замечательное регулярное выражение, которое помогает удалять цветовые коды, взято из https://stackoverflow.com/a/18000433/2487227

Я сохранил этот скрипт в / usr / local / bin / pager , а затем git config --global core.pager / usr / local / bin / pager

Лечение пациентов с ОКР, ура!

9
27.01.2020, 19:59

В качестве пейджера я использую следующую оболочку. Это не так красиво, как другая оболочка, показанная здесь (, потому что она всегда использует less -Sдля усечения длинных строк ), но она чертовски проста. Кажется, работает очень хорошо с iTerm2.

#!/bin/bash
set -e

text=$(</dev/stdin)
text_lines=$(echo "${text}" | wc -l)
term_lines=$(tput lines)

if [[ $text_lines -lt $term_lines ]]; then
    echo "${text}"
else
    echo "${text}" | less -S -R
fi
0
27.01.2020, 19:59

Теги

Похожие вопросы