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
行为不同,我不认为原因是我的环境中的某些东西。
的版本less
和env
是相同的: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)
。
对于最可能的解释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
它产生排序的输出(并以一种使带有换行符的值明确的形式引用)。
归档时间: |
|
查看次数: |
46 次 |
最近记录: |