Как я могу сохранить содержимое, которое я читал от человека после того, как я ушел?

Итак, мы используем 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 строк) для эмуляторов терминала, чтобы я мог полностью прокрутить справочную страницу в одной из них и использовать отдельный экземпляр терминала для сборки команды. Работает угощение.

Другие вопросы по тегам