Да вы можете поместить переменную LESS_TERMCAP_me
в файл lesskey
, но для этого потребуется исправить исходный код и создать собственную less
версию (Я объясню это ниже ).
Нет файл lesskey
не может содержать внешние команды, поскольку tput
становится независимым от терминала -. Однако вы можете использовать несколько файлов lesskey
в соответствии с рекомендациями ответа Томаса Дики .
lesskey
файл Командаlesskey
используется для преобразования человеческого -читаемого текстового содержимого в двоичный файл конфигурации для команды less
. Этот файл конфигурации называетсяlesskey
файл и обычно называется файлом ~/.less
.
Этот файл содержит три раздела:
:q quit
)^G abort
)less
переменные окружения(например.LESS_TERMCAP_me = \033(B\033[m
)LESS_TERMCAP_*
в файл lesskey
$ cat > lesskey.txt << EOF
#env
LESS = -iSrsM +Gg
LESS_TERMCAP_md = $(tput bold; tput setaf 6)
LESS_TERMCAP_me = $(tput sgr0)
LESS_TERMCAP_so = $(tput bold; tput setaf 3; tput setab 4)
LESS_TERMCAP_se = $(tput rmso; tput sgr0)
LESS_TERMCAP_us = $(tput smul; tput bold; tput setaf 7)
LESS_TERMCAP_ue = $(tput rmul; tput sgr0)
LESS_TERMCAP_mr = $(tput rev)
LESS_TERMCAP_mh = $(tput dim)
EOF
$ lesskey lesskey.txt # By default lesskey writes ~/.less
$ man bash # By default man uses less (pager)
Команда less
считывает конфигурацию ~/.less
слишком поздно:
сразу после поиска переменных LESS_TERMCAP_*
.
Эта ошибка затрагивает версию 487 , выпущенную 29 марта 2017 г. (и, безусловно, предыдущие версии ).
Я только что отправил сообщение об ошибке и соответствующее исправление сопровождающим. Я обновлю этот ответ, когда исправление будет применено к следующему выпуску less
...
Скачать архив с исходным кодом из:
Инвертировать две строки в файле main.c
в строке 113
До:
/*
* Process command line arguments and LESS environment arguments.
* Command line arguments override environment arguments.
*/
is_tty = isatty(1);
get_term();
init_cmds();
init_charset();
init_line();
После:
/*
* Process command line arguments and LESS environment arguments.
* Command line arguments override environment arguments.
*/
is_tty = isatty(1);
init_cmds(); /* Load lesskey file before */
get_term(); /* getting variables LESS_TERMCAP_* */
init_charset();
init_line();
Установите зависимости, необходимые для сборки
./configure
Если ./configure
не удается, определите отсутствующие зависимости.
В моем случае я установил ncurses-devel
для получения заголовка term.h
.
Сборка
make
Сохраните свой собственный -скомпилированный less
где-нибудь, например, в личном каталоге~/bin
mkdir -p ~/bin
cp./less ~/bin
PATH="$PATH:~/bin"
Не забудьте установить переменную окружения PATH
в свой ~/.profile
или, если вы предпочитаете любой другой файл, как ~/.bashrc
, ~/.login
...
См. TERMCAPS
, используемый на странице man -
LESS_TERMCAP_DEBUG=1 man bash
Получить man-страницу -с кодировкой TERMCAPS
MANPAGER='tee man.txt' man bash
Объедините эти два совета
MANPAGER='tee man.txt' man bash
LESS_TERMCAP_DEBUG=1 less man.txt
Трубка тут вообще ни при чем. cp
не имеет выходных данных, поэтому вы не можете направить его выходные данные в другую программу. Я предполагаю, что вы хотели ;
или &&
вместо:
## copy the file and then run sed
cp file.txt file.txt.bak; sed -i '1i#Backup file' file.txt.bak
Или
## copy the file and then run sed BUT only if the copy was successfull
cp file.txt file.txt.bak && sed -i '1i#Backup file' file.txt.bak
Однако, если все, что вам нужно, это копия исходного файла с измененной первой строкой, то sed действительно может сделать это за вас:
sed '1i#Backup file' file.txt > file.txt.bak