从 Bash 和 Git 调用时“less”的执行方式不同

从 Bash 和 Git 调用时“less”的执行方式不同

当我使用 来查看较大的差异时git diff,它会使用 进行分页less。通过打开另一个窗口并检查来自ps -aux和 的数据可以确认这一点/proc

但是,当less由 Git 调用时,它不会将终端内容恢复到命中后的先前状态q(差异内容保留在终端中)。但当我这样做时

git diff commit1 commit2 --color | less -R

less按 键退出q,内容消失,终端恢复到之前的状态。

更有趣的是,如果我这样做

export PAGER=less LESS='-R'

和 invoke git diff(或调用寻呼机的任何其他命令)的less行为与直接从 Bash shell 调用相同。

我

这是描述我的问题的简短屏幕截图。在左侧窗格中,命令执行如下:

unset PAGER GIT_PAGER LESS
git diff HEAD^ HEAD

在右侧窗格中您可以看到命令。最新提交有 100 多行y写入文件。在两个窗格上less均使用 key 退出q

谁能告诉我有什么不同并解释为什么?

答案1

文档:

LESS环境变量未设置时,Git 将其设置为FRX(如果LESS设置了环境变量,Git 根本不会更改它)。

-X( )选项--no-init负责退出后不清除终端less

相关内容