Less

如何防止 HP-UX 命令“less”弄亂我的提示?

  • December 27, 2016

我不喜歡moreHP-UX 上的輸出,所以我將less其用作尋呼機:

PAGER=less

它的輸出很好,但是,在 Linux 上,當我使用man然後退出時,我回到 shell,顯示看起來就像我離開它的樣子,但是在 HP-UX 上,當我回到 shell 時,那裡是提示符之前留下的部分行,很像以下命令產生的:

echo -e "text \c"

看這個:

  • 在 HP-UX 上:
user@hpux2:~$ man ls
Riformattazione in corso. Attendere...user@hpux2:~$

(意大利語消息的意思是“正在重新格式化,請稍候”)

  • 在 Linux 上:
user@linux:~$ man ls
user@linux:~$

如何解決這個問題呢?

螢幕交換是通過終端控制程式碼完成的。此類程式碼記錄在terminfo(5). 螢幕保存/恢復中涉及的兩個通常是smcuprmcup。第一個打開終端的特殊游標定址模式(sm=“set mode”),第二個將其關閉。通常,這兩個將保存螢幕並恢復它。

如果螢幕恢復不起作用,則這些條目可能不適合您的終端類型。infocmp您可以使用該命令列印目前 terminfo 條目的內容。您需要查看這些條目 (smcuprmcup) 並將轉義序列與終端手冊進行比較以確定它們的作用。奇怪的是您的終端與 terminfo 條目所期望的終端略有不同。

提到的功能是 xterm 的備用螢幕,它是在 X.V10R4(1986 年 12 月)中引入的。雖然支持該功能,但直到 X11R6(大約十年)才添加到終端描述中。

HPUX 的終端描述xterm恰好與 X11R5 的描述相同,只是增加了一些(主要是功能鍵 1-12)。同樣,該功能(功能鍵)已被程序支持一段時間,但未添加到終端描述中。

以下是infocmpHPUX 的報告:

#       Reconstructed via infocmp from file: /usr/share/lib/terminfo/x/xterm
xterm|vs100|xterm terminal emulator,
       am, km, xenl,
       cols#80, lines#65,
       bel=^G, blink=@, bold=\E[1m, civis=\E[?25I,
       clear=\E[H\E[2J, cnorm=\E[?25h, cr=\r,
       csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\b,
       cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
       cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
       cvvis=\E[?25h, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
       dl1=\E[M, ed=\E[J, el=\E[K, home=\E[1;1H, ht=\t,
       hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL,
       il1=\E[L, ind=\n, kbs=\177, kcub1=\EOD, kcud1=\EOB,
       kcuf1=\EOC, kcuu1=\EOA, kf1=\EOP, kf10=\E[21~,
       kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR,
       kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~,
       kf8=\E[19~, kf9=\E[20~, knp=\E[6~, kpp=\E[5~, rc=\E8,
       rev=\E[7m, ri=\EM, rmkx=\E[?1l, rmso=\E[m,
       rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H, rs2=@,
       sc=\E7,
       sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m,
       sgr0=\E[m, smkx=\E[?1h, smso=\E[7m, tbc=\E[3g,

以下是X11R6 文件X11R3(通過 X11R5 未更改)的連結。X11R6 終端描述中的備用螢幕功能由以下行提供

smcup=\E7\E[?47h, rmcup=\E[2J\E[?47l\E8,

使用 ncurses(Linux 等),您有一個更晚的終端描述,其中列出了所有適用的功能。

對於 HPUX,您可以通過使用 tic 編譯添加了該功能的終端描述來解決此問題。如果您在 HPUX 機器上具有 root 訪問權限,那很簡單:

infocmp >foo
vi foo (adding the `smcup` and `rmcup` line)
sudo tic foo

否則,您可以通過將 TERMINFO environment variable to your own terminfo directory, and runningtic` 設置為編譯到目錄來解決它。就像是

TERMINFO=$HOME/myterm; export TERMINFO
mkdir -p $TERMINFO/x
tic foo

(您還需要TERMINFO在 shell 中設置後續會話)。

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