Bash
終端提示未正確換行
我有一個問題,如果我在 bash 中輸入很長的命令,終端將無法呈現我正在正確輸入的內容。我希望如果我有如下命令:
username@someserver ~/somepath $ ssh -i /path/to/private/key myusername@something.someserver.com
該命令應呈現在兩行上。相反,它通常會環繞並開始在我的提示頂部寫入,有點像這樣:
myreallylongusername@something.somelongserver.comh -i /path/to/private/key
如果我決定返回並更改某些參數,則不知道游標會出現在哪裡,有時會出現在提示符的中間,但通常會出現在我正在輸入的行的上方。
當我
Up
執行上一個命令時,會發生額外的樂趣。我在 gnome-terminal 和 terminator 以及 i3 和 Cinnamon 上都試過這個。有人建議這是我的提示,所以這裡是:\[\033[01;32m\]\u:\[\033[01;34m\] \W\033[01;34m \$\[\033[00m\]
Ctrl``l
,reset
, 並且clear
都按照他們說的做,但是當我重新輸入命令時,或者Up
同樣的事情發生了。我檢查並
checkwinsize
在 bash 中啟用。這發生在 80x24 和其他視窗大小上。這只是我學會忍受的東西嗎?有什麼我應該知道的魔法嗎?我已經決定只使用一個非常簡短的提示,但這並不能解決問題。
不可列印的序列應包含在
\[
和\]
中。看看你的PS1,它後面有一個未封閉的序列\W
。但是,第二個條目是多餘的,它重複了前面的語句*“1;34”*。\[\033[01;32m\]\u:\[\033[01;34m\] \W\033[01;34m \$\[\033[00m\] |_____________| |_| | | +--- Let this apply to this as well.
因此,這應該具有預期的著色:
\[\033[1;32m\]\u:\[\033[1;34m\] \W \$\[\033[0m\] |_____| | +---- Bold blue.
保持*“原始”*這也應該有效:
\[\033[1;32m\]\u:\[\033[1;34m\] \W\[\033[1;34m\] \$\[\033[0m\] |_| |_| | | +-----------+-- Enclose in \[ \]
編輯:
該行為的原因是因為
bash
相信提示比實際更長。舉個簡單的例子,如果有人使用:PS1="\033[0;34m$" 1 2345678
提示被認為是 8 個字元而不是 1。因此,如果終端視窗是 20 列,在輸入 12 個字元後,它被認為是 20 並環繞。如果嘗試執行退格或
Ctrl+u
. 它停在第 9 列。但是,除非在最後一列上,否則它也不會開始新行,因此第一行被覆蓋。
如果繼續輸入,則該行應在 32 個字元後換行到下一行。