我退出后怎样才能保留从 man 中读取的内容?

我退出后怎样才能保留从 man 中读取的内容?

因此我们使用man whatever来获取有关whatever命令的使用方法和其他信息,当找到相关信息部分时,我想退出命令man并将信息留在屏幕上。这样我就可以使用上面的裁判输入下一个命令。但该man命令会退出整个屏幕以恢复旧屏幕,类似于vim。有没有办法实现这一点?

答案1

我相信这与其说是有关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永久设置为该值。

答案2

如果你运行 less 作为你的分页器(这很常见),你不需要修改分页器,只需进行 I/O 重定向:

man <whatever you want to man> | cat -

这会将副本打印到终端,以便您在需要时向上滚动。

答案3

由于不仅如此less,其他文本应用程序也vim表现出同样极其烦人的功能,我所做的只是删除终端支持来自terminfo数据库的相关命令的能力。

这些命令是smcuprmcup,旨在允许在cup允许命令(光标位置)的移动处打开和关闭移动。

下面是我用来自动执行任务的 shell 函数,它至少适用于 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在脚本中用正确的终端名称替换。

答案4

无需修改寻呼机,解决方案是管道可以在大多数环境中工作:

示例man ls

  • 留下整个男人屏幕上的页面man ls | cat
  • 阅读分页男人输出,可以随时将其保留man ls | more
  • 筛选男人用模式保存内容并在屏幕上保留匹配的行:man ls | grep somestring

相关内容