Ssh

ssh 終端中顯示損壞的行

  • June 9, 2013

我的控制台畫線有問題。問題是當我通過 ssh 連接到伺服器時,一切正常。但是當我使用向上箭頭鍵顯示最後使用的命令時,它通常會在$符號後留下幾個字元(粗體是提示後留下的內容):

user@host:/var/www_vhosts/package-installer $ **cp -r inst** nano/etc/issue

更令人惱火的是,當我輸入的字元多於控制台寬度時會發生什麼。游標以某種方式回到行首並覆蓋提示:

**/d/asd/as/d/asd/asd/as/d/asd/asd** ww_vhosts/package-installer $ls -la asdkasdasdasd/asdasdasd/asdasdasdasdasdas/dasdsdaas/d/asd/as/d/asd/as

我不能使用任何長命令,因為它會覆蓋開頭,而且我看不到我是否正確輸入了所有內容。即使顯示已損壞,粘貼到控制台內的長命令也能正常工作。就像只有顯示已損壞,但命令本身沒問題。

我有 ubuntu 12.10 並Konsole用作終端應用程序。伺服器上有Debian GNU Linux 6.0

它只發生在我連接的其他伺服器上,適用於Konsole. 我的同事putty用來連接到同一台伺服器,他們也有同樣的問題。所以看起來問題出在伺服器而不是終端程序上。

在伺服器上沒有xterm包,所以我爭取它應該安裝它來解決問題。但即使在我安裝了這個包之後,同樣的問題仍然存在。安裝後我應該重新啟動伺服器xterm嗎?我不喜歡,因為我不是伺服器管理員。

我需要補充一點,調整控制台視窗的大小似乎也在stty伺服器上發生了變化:

user@host:~$ stty -a
speed 38400 baud; rows 57; columns 151; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
user@host:~$ stty -a
speed 38400 baud; rows 57; columns 172; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

我已經嘗試了包括使用resizereset命令在內的解決方案,但它們沒有幫助。

如何解決這個問題?

我在Unix 和 Linux上問過同樣的問題,但沒有找到解決方案,所以我在這裡寫。

好的,我終於找到了解決方案。問題是$PS1沒有用\[and括起來的顏色序列\]。更正之前$PS1是:

export PS1='\e[1;32m\u@\h:\w$ \e[m'

修復後:

export PS1='\[\e[1;32m\]\u@\h:\w$ \[\e[m\]'

我在這裡找到了解決方案:https ://stackoverflow.com/questions/2024884/commandline-overwrites-itself-when-the-commands-get-to-long

這裡有幾個問題。向上和向下箭頭的問題通常來自術語類型不匹配。

換行錯誤發生在我身上,通常是因為您更改了螢幕尺寸。從“80x24”到“151x57”。有時取消設置 LINES 和 ROWS 可以解決問題,使用

unset LINES
unset ROWS

然後看看問題是否消失。有一個命令(我認為 stty 也可以),它會在你調整它的大小後重置你的終端,這樣 bash 就不會嚇壞了,但我必須去查一下。

引用自:https://serverfault.com/questions/513927