在不清除命令行历史记录输出的情况下,将管道减少到-S

pil*_*ght 5 linux bash shell terminal command-line

所以我想通过管道输出命令来在终端中为我的自定义bash命令提供水平滚动 | less -S

但是,如果我这样做,一旦退出较少,命令的输出将不会保留在命令行历史记录中

当你退出时,有没有办法配置less以保持历史记录中的命令输出?

例如.如果你看git diff,你可以执行水平滚动然后退出但输出仍然保留在历史记录中,然后您可以键入新命令...我本质上想要为我的自定义bash命令模拟这个.此外,git diff它在现场执行水平滚动(即,不使用新屏幕),命令行历史记录仍然可见,而less它可以在自己的屏幕上执行,而您将无法看到命令行历史记录"莱辛".是否有可能在较少的情况下模拟这种git diff-like机制?

如果有任何其他解决方案没有使用less随意丢弃它

更新的问题

所以假设我这样做:

cat loremipsum | less -FRSX

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam sed 
Run Code Online (Sandbox Code Playgroud)

然后我向右按两次,使其向右滚动两次.然后我按q退出更少.屏幕上保留的输出将是:

cat loremipsum | less -FRSX

 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam sed 

 ESCOC

dictum diam. Nullam quis urna ullamcorper, accumsan quam vitae, aliquet 

 ESCOD

nisl. Maecenas vitae lorem orci. Ut vel est erat. Cras quis sagittis sapien, ac volutpat metus. 

 username@server:~/httpdocs$
Run Code Online (Sandbox Code Playgroud)

但是在git diff中你做同样的事情,然后按q,只有最后一部分(即我滚动到右边的屏幕的最后一部分)

 git diff

nisl. Maecenas vitae lorem orci. Ut vel est erat. Cras quis sagittis sapien, ac volutpat metus. 

 username@server:~/httpdocs$
Run Code Online (Sandbox Code Playgroud)

将保留在屏幕上

我如何才能实现这一点

Dig*_*uma 10

我无法访问我git diff现在可以运行的任何内容,但如果我正确地阅读了您的问题和评论,我认为较少的-X选项会有所帮助.例如

ls -la | less -SX
Run Code Online (Sandbox Code Playgroud)

这可以防止在显示输出之前保存和清除屏幕,以及在退出时清除和恢复屏幕.

更新

我拉了一个git工作区,弄清楚git diff实际上在做什么:

$ pstree -p | grep git
        |-xterm(6021)---bash(6023)---sh(6104)---git(17708)---less(17709)
$ cat /proc/17709/cmdline | xargs -0 echo
less
$ cat /proc/17709/environ | xargs -0 --replace echo {} | grep LESS
LESSOPEN=|/usr/bin/lesspipe.sh %s
LESS=FRSX
$ 
Run Code Online (Sandbox Code Playgroud)

因此git diff没有选择less.相反,它将LESS环境变量设置为FRSX.这与将-FRSX选项传递给less相同.那么,你得到了-FRSX你需要的东西:

ls -la | less -FRSX
Run Code Online (Sandbox Code Playgroud)