linux - 管道到 less -S 而不清除命令行历史记录的输出

标签 linux bash shell command-line terminal

所以我想通过管道将命令的输出传送到 | 来为我的自定义 bash 命令在终端中水平滚动少-S

但是,如果我这样做,一旦你退出less,命令的输出将不会留在命令行历史中

有没有办法配置 less,在退出 less 时将命令的输出保留在历史记录中?

例如。如果你查看 git diff,你可以执行水平滚动然后退出,但输出仍然保留在历史记录中,然后你可以在其中键入新命令......我基本上想为我的自定义模拟这个巴什命令。同样在 git diff 中,它会在现场执行水平滚动(即不使用新屏幕)并且命令行历史记录仍然可见,而对于 less 它会在它自己的屏幕,你将无法在“lessing”时看到命令行历史记录。是否也可以在 less 中模拟这种类似 git diff 的机制?

如果有任何其他不使用 less 的解决方案,请随意将其抛出

更新问题

假设我这样做:

cat loremipsum | less -FRSX

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

然后我按向右两次,使其向右滚动两次。然后我按 q 退出 less。留在屏幕上的输出将是:

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$

但是在 git diff 中,当您执行相同的操作然后按 q 时,只有最后一部分(即我向右滚动的屏幕的最后一部分)

 git diff

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

 username@server:~/httpdocs$

会留在屏幕上

我怎样才能让这一切发生呢

最佳答案

我现在无法访问任何可以运行 git diff 的东西,但如果我正确阅读了你的问题和评论,我认为 less 的 -X 选项会有所帮助。例如

ls -la | less -SX

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

更新

我拉了一个 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
$ 

因此 git diff 没有将任何选项传递给 less。相反,它将 LESS 环境变量设置为 FRSX。这与将 -FRSX 选项传递给 less 相同。那么,您是否通过 -FRSX 获得了所需的信息:

ls -la | less -FRSX

关于linux - 管道到 less -S 而不清除命令行历史记录的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19300121/

相关文章:

java - 通过java代码使用bash命令使linux目录可写

c++ - 检查字符设备

linux - 具有多个变量(语句)的循环

linux - 检查 bash 脚本上的 AWS cli 版本

linux - 如何将本地 shell 变量导出到多命令 ssh 中?

bash - 如何将列表作为环境变量传递给 Terraform 使用?

linux - 如何使用 shell 脚本检查 2 台机器中的文件夹?

linux - 如果您的服务器只有 1 个域名,为什么要使用 <VirtualHost> ?但为什么 "ServerAlias"不能在没有 <VirtualHost> 的情况下使用

python - 如何在 Linux 上将文件写入 RAM

php - 将 bash 换行符转换为 HTML 换行符;在 BASH 中运行良好,但不能通过 shell_exec