Terminal

在 env 中呼叫時,less 不會分頁輸出

  • May 13, 2021

更新後,我注意到我用於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它不像產生排序輸出(並以使換行符明確的值的形式引用)。

引用自:https://unix.stackexchange.com/questions/649561