淺析如何解決終端輸入長命令不換行覆蓋(Docker容器內輸入長命令折行覆蓋)問題:如何設置docker容器tty終端窗口大小-Linux stty命令設置串口終端行列數


  在進到容器內部執行命令的時候,如果命令比較長,會出現折行情況,如

  可以調節里面的兩個環境變量:$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,然后就可以執行上面命令即可。這就就可以換行顯示了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM