在 env 中呼叫時,less 不會分頁輸出
更新後,我注意到我用於
man
著色的 bash 配置文件會中斷分頁。我不知道發生了什麼變化,但我將其縮小到這樣一個事實,即呼叫env less hello.txt
導致內容hello.txt
被回顯到終端(如cat
)而沒有分頁行為。我該如何調試和解決這個問題?為了消除一些環境變數的影響,我用最小的環境進行了測試:
env -i TERM=xterm-256color /usr/bin/less hello.txt
甚至:
env -i /usr/bin/less hello.txt
這也只是將文件列印到標準輸出。在具有相同軟體版本的不同機器上,分頁工作(如果
TERM
保留)。由於甚至
env -i
表現不同,我不認為原因是我的環境中的某些東西。
less
和的版本env
相同:less 581.2 (PCRE2 regular expressions)
和GNU coreutils 8.32
,作業系統是 Arch Linux 64 位,最新,shell: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
它不像產生排序輸出(並以使換行符明確的值的形式引用)。