在 env 中调用时,less 不会分页输出

Lev*_*sky 3 less pager terminal environment-variables

更新后,我注意到我的 bashman着色配置文件中断了分页。我不知道发生了什么变化,但我将范围缩小到这样一个事实,即调用env less hello.txt导致内容hello.txt被回显到终端(如cat)而没有分页行为。我该如何调试和解决这个问题?

为了消除一些环境变量的影响,我用最小环境进行了测试:

env -i TERM=xterm-256color /usr/bin/less hello.txt
Run Code Online (Sandbox Code Playgroud)

甚至:

env -i /usr/bin/less hello.txt
Run Code Online (Sandbox Code Playgroud)

这也只是将文件打印到标准输出。在具有相同软件版本的不同机器上,分页工作(如果TERM保留)。

由于甚至env -i行为不同,我不认为原因是我的环境中的某些东西。

的版本lessenv是相同的:less 581.2 (PCRE2 regular expressions)GNU coreutils 8.32,OS是Arch Linux的64位,到目前为止,壳牌:GNU bash, version 5.1.8(1)-release (x86_64-pc-linux-gnu)

Gil*_*il' 5

对于最可能的解释env foo …,从一个普通的行为不同foo …的是,foo是一个函数或别名。由于env是外部命令,因此它查找foo为外部命令。

然而,在这里,它env本身就是一个别名。显然,如果env不是标准env命令,它的行为可能会有所不同。

结果证明这是grc中的一个错误,它设置了一个包含在 bash 启动期间的文件(也有 zsh 和 fish 版本),该文件定义了许多命令,包括env作为别名:env别名为grc -es env. grc -es …运行指定的命令,其标准输出和标准错误都重定向到管道,在管道中grc插入转义序列以更改文本颜色。这对于产生人类想要以格式良好的方式阅读的输出的命令来说很好。但是对 执行它没有意义env,这是一个命令,其主要作用是调用另一个具有修改环境的命令。foo用户运行时自动将输出和错误输出重定向到管道env foo是破坏性的,无论如何它都没用,因为 grc 不知道如何为输出着色。我想我们的目标是在env不带参数的情况下为 的输出着色,它显示环境,但这非常无用,因为 的输出env首先不是非常用户友好:export做得更好,因为不像env它产生排序的输出(并以一种使带有换行符的值明确的形式引用)。