如何防止 HP-UX 命令“less”弄亂我的提示?
我不喜歡
more
HP-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)
. 螢幕保存/恢復中涉及的兩個通常是smcup
和rmcup
。第一個打開終端的特殊游標定址模式(sm=“set mode”),第二個將其關閉。通常,這兩個將保存螢幕並恢復它。如果螢幕恢復不起作用,則這些條目可能不適合您的終端類型。
infocmp
您可以使用該命令列印目前 terminfo 條目的內容。您需要查看這些條目 (smcup
和rmcup
) 並將轉義序列與終端手冊進行比較以確定它們的作用。奇怪的是您的終端與 terminfo 條目所期望的終端略有不同。
提到的功能是 xterm 的備用螢幕,它是在 X.V10R4(1986 年 12 月)中引入的。雖然支持該功能,但直到 X11R6(大約十年)才添加到終端描述中。
HPUX 的終端描述
xterm
恰好與 X11R5 的描述相同,只是增加了一些(主要是功能鍵 1-12)。同樣,該功能(功能鍵)已被程序支持一段時間,但未添加到終端描述中。以下是
infocmp
HPUX 的報告:# 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 running
tic` 設置為編譯到該目錄來解決它。就像是TERMINFO=$HOME/myterm; export TERMINFO mkdir -p $TERMINFO/x tic foo
(您還需要
TERMINFO
在 shell 中設置後續會話)。