在進到容器內部執行命令的時候,如果命令比較長,會出現折行情況,如
可以調節里面的兩個環境變量:$COLUMNS $LINES,默認是80 24。
一、問題描述及解決
1、問題情況一:我需求里遇到的情況
docker 容器在啟動成功后是可以通過docker exec,kubectl exec命令登陸進去操作(當然前提是容器鏡像提供了登錄的環境),但是我們往往發現進去后貌似窗口大小不能自適應我們的屏幕大小,以致於復制長的命令時會自動幫我們換行,而且會與之前的命令重疊導致無法閱讀的情況;如下:
雖然你繼續輸入命令只要保證命令沒問題還是可以執行的,但是給我們視覺操作上帶來了很大的不變,那能不能手動調整控制台窗口大小呢?
當然因為我們平時連接服務器是使用 SSH 連接工具,一般工具也給我們做了這種 行列數 的自適應,所以我們在平時使用 ssh 工具的時候感覺不到。但是我們在做那個 web-terminal 通過 ssh 直接連接容器的需求,所以就遇到了這個問題。起初以為是 xtermjs 的問題,后來發現原來是 docker 容器 tty 偽終端窗口默認設置的問題,默認設置就是 cols 80、rows 24,我們都可以通過命令去修改。
2、問題情況二:
之前在 linux 命令行輸入命令過長時,總是碰到不能自動換行,並且還會覆蓋當前行的情況。像下面這樣:
root@TSync:~# dddd@TSync:~# dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
上面的 dddd 並沒有換行,而且把之前的內容覆蓋了。
二、解決方案
后來終於通過 stty 命令解決了。查看行列數,並將列數從80改為160,搞定。
root@TSync:~# stty size 24 80 root@TSync:~# stty cols 160 root@TSync:~# ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
dddddddddddddddddddddddddd
dddd如果溢出會自動換行,並且不會覆蓋之前的內容。
我們通過算出 dom 元素的寬度,然后除以字體寬度,算出一行可以展示多少數 ,即 cols,然后就可以執行上面命令即可。這就就可以換行顯示了。