如何美化linux终端输出
我以前寫過一篇文章Linux C/C++ 如何輸出彩色字體
點擊鏈接即可傳送
這里我再加兩個常用的控制字符\n和\r
有人會問,這兩個不久換行符嘛,有什么好講的。其實不然。
| Windows | \r\n |
| Linux | \n |
| Mac OS | \r |
有人又會問,不對呀,我在C/C++中都用\n作換行符的,怎么沒報錯?其實編譯器作了特殊優化。
那么\r和\n到底有什么區別呢?
\r代表光標移動到行首,\n代表光標向下移動
看到這里,我想大家也明白了,Windows的換行符是最標準的
先將光標移動至行首,再下移一行
但我的重點不是換行符,而是\r
有的人可能知道退格符\b,意思是把光標倒退一格
這個控制字符在一些情況下十分有用,比如vim八成是這么干的,但如果要顯示進度條,怎么退到行首呢?
這個時候,\r登場了。終端對輸出的處理是覆蓋本行后面的字符(如果有的話)
于是只要新的輸出大于等于原來的輸出,就可以做到更新進度條。
std::cout << "Hello world!\rThis is a new sentence!" << std::endl;
這句話輸出很明顯,應該是This is a new sentence!
但如果換一個,std::cout << "Hello world!\rHello!" << std::endl;
你會發現,輸出不是Hello!而是Hello!world!
因為終端不會把本行的所有字符都刪除,而是用類似Insert的模式去輸出。
那么這個時候,打開Linux C/C++ 如何輸出彩色字體,找到\033[K這一行,這個控制字符串就可以幫助你刪除本行光標后的內容,可以配合\r使用(僅限于Linux,對于其他操作系統,會將那一串全部輸出)
到這里,進度條已經可以實現了。但是我在測試的時候發現了問題,因為更新過于頻繁,會導致光標不斷在那一行閃動,影響視覺效果。這個時候,再次點擊傳送門,發現控制字符串\033[?25l可以隱藏光標,而控制字符串\033[25h可以重新顯示。這就非常好了,只要在輸出的開始時隱藏光標,在結束時顯示光標就行了。
那么至此,你結合表格(傳送門內),就可以實現apt的進度條了(Progress那個只需要在輸出開始先光標下移\n,在輸出結束光標上移\033[1A就行了)
總結
以上是生活随笔為你收集整理的如何美化linux终端输出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++类的使用(六)—— 判断继承
- 下一篇: Linux:常用命令大全