Итак, мы используем man something
, чтобы получить информацию об использовании и другую информацию о команде Any
, когда соответствующий раздел информации найден, я бы хотел чтобы выйти из команды man
, оставив информацию на экране. Итак, я могу ввести следующую команду с рефери, указанным выше.
Есть ли способ добиться этого?
Я считаю, что дело не столько в самом man
, сколько в выбранном вами пейджере (переменная среды PAGER
) в сочетании с используемым терминалом .
Я предполагаю, что ваш пейджер, вероятно, на меньше
(типичный пейджер по умолчанию в настоящее время и соответствует описанию).
less
имеет параметр -X
, который может привести к поведению в соответствии с тем, что вы ищете.
-X or --no-init
Disables sending the termcap initialization and deinitialization
strings to the terminal. This is sometimes desirable if the
deinitialization string does something unnecessary, like clear‐
ing the screen.
Например, PAGER = "less -X" man man
можно использовать для проверки, и если вы сочтете такое поведение предпочтительным вы можете установить это значение навсегда для PAGER
.
Если вы используете меньше пейджера (что очень часто), вы не нужно заниматься изменением вашего пейджера, просто перенаправьте ввод-вывод:
man <все, что вы хотите man> | cat -
Это распечатает копию на терминал, чтобы вы могли прокрутить вверх, когда вам это нужно.
Без изменения пейджера, решение с конвейерами , который может работать в большинстве сред:
Примеры для man ls
man ls | cat
man ls | подробнее
man ls | grep somestring
сейчас 2016 год, просто откройте второй терминал, вкладку или окно или прочитайте человека в Интернете ..
Поскольку не только less
, но и другие текстовые приложения, такие как vim
, демонстрируют ту же чрезвычайно раздражающую функцию, я просто удаляю возможность терминал для поддержки задействованных команд из базы данных terminfo
.
Это команды smcup
и rmcup
, которые были разработаны, чтобы разрешить включение и перемещение где разрешена команда cup
(положение курсора).
Вот функция оболочки, которую я использовал для автоматизации задачи, она работает по крайней мере с Solaris и, вероятно, с большинством дистрибутивов Linux:
fixterminfo()
{
(
[[ ! -d /tmp/terminfo ]] && { mkdir /tmp/terminfo || return ; }
cd /tmp/terminfo || return
TERM=xterm infocmp > xterm.src.org
sed -e 's/rmcup=[^,]*,//' -e 's/smcup=[^,]*,//' xterm.src.org > xterm.src
if diff xterm.src.org xterm.src
then
echo xterm terminfo already patched
return
fi
TERMINFO=/tmp/terminfo tic xterm.src
if [ -f /usr/share/lib/terminfo/x/xterm ] ; then
XTERM=/usr/share/lib/terminfo/x/xterm
else
if [ -f /lib/terminfo/x/xterm ] ; then
XTERM=/lib/terminfo/x/xterm
else
if [ -f /usr/share/terminfo/x/xterm ] ; then
XTERM=/usr/share/terminfo/x/xterm
else
echo xterm terminfo not found ; return
fi
fi
fi
if [ ! -f ${XTERM}.org ]
then
sudo cp ${XTERM} ${XTERM}.org || return
fi
cat /tmp/terminfo/x/xterm | sudo dd of=${XTERM}
)
}
Если ваша запись в терминале не возвращается к xterm
, вам следует заменить xterm
правильным именем терминала в скрипте.
Даже на своих серверах (FreeBSD) я устанавливаю X и xfce. Затем я выделяю большой буфер (например, 10 000 строк) для эмуляторов терминала, чтобы я мог полностью прокрутить страницу руководства в одном из них и использовать отдельный экземпляр терминала для сборки команды. Работает приятно.
Вы можете передать вывод по конвейеру команде cat
man man|cat
или использовать ее вместо пейджера по умолчанию, как в этом примере, который вызывает man на себе:
PAGER=cat man man