Как я могу сохранить содержимое, которое я читал от человека после того, как я ушел?
Итак, мы используем man whatever
чтобы получить использование и другую информацию относительно whatever
Команда, когда соответствующий раздел информации найден, я хотел бы выйти из man
Команда с информацией, оставленной на экране. Поэтому я могу набрать следующую команду с рефери выше. Но man
Команда покидает весь экран, чтобы восстановить старый экран, похожий на vim
, Есть ли способ добиться этого?
7 ответов
Я считаю, что это не столько о man
сам, а о вашем пейджере выбора (PAGER
переменная среды) в сочетании с используемым терминалом.
Я думаю, твой пейджер, вероятно, less
(типичный пейджер по умолчанию в настоящее время и соответствует описанию).
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 <whatever you want to man> | cat -
Это распечатает копию на терминал, так что вы можете прокрутить вверх, когда вам это нужно.
Как не только 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
по правильному имени терминала в скрипте.
Вы можете направить вывод на cat
команда
man man|cat
или используйте его вместо пейджера по умолчанию, как в этом примере, который вызывает man для себя:
PAGER=cat man man
Без модификации пейджера, решение с каналами, которые могут работать в большинстве сред:
Примеры для man ls
- Оставьте всю справочную страницу на экране
man ls | cat
- Прочитайте постраничный вывод man, с возможностью оставить его в любое время с помощью q:
man ls | more
- фильтруйте содержимое man с шаблоном и сохраняйте совпадающие строки на экране:
man ls | grep somestring
Это 2016, просто откройте второй терминал или вкладку или окно или прочитайте человека онлайн.
Даже на своих серверах (FreeBSD) я устанавливаю X и xfce. Затем я выделяю большой буфер (например, 10 000 строк) для эмуляторов терминала, чтобы я мог полностью прокрутить справочную страницу в одной из них и использовать отдельный экземпляр терминала для сборки команды. Работает угощение.