作者 主題: 想讓Bash shell 執行時印出字元有顏色變化要怎麼做?  (閱讀 10211 次)

0 會員 與 1 訪客 正在閱讀本文。

  • 實習板主
  • 活潑的大學生
  • ***
  • 文章數: 270
    • 檢視個人資料
echo是很常用的指令,不過若是想讓提示有色彩變化,有什麼方法可以達成?

雖然似乎從

ls --color >test_color.txt
vi test_color.txt

man ls > ls.txt
vi ls.txt


可見到奇怪的控制碼,不過還沒看出規則
亂改會讓畫面變成無法閱讀的亂碼。這種文件何處查得到。
又如何便於編輯

jeffer

  • 懷疑的國中生
  • **
  • 文章數: 83
    • 檢視個人資料
引述: "任俠"
。這種文件何處查得到。....
又如何便於編輯

兩者不可兼得...
若要便於編輯,用 tput 就好了,很明確,有反白,閃爍,加底線,不會有亂碼.
至於 color 我也不知,不過一般是用 ansi 

  • 實習板主
  • 活潑的大學生
  • ***
  • 文章數: 270
    • 檢視個人資料
測試出來的文字介面的彩色文字效果
« 回覆 #2 於: 2002-06-08 22:48 »
這是我的測試成果:
cat color_ls.txt 可以看到文字色彩效果,在Jmcce下會比較慢,且沒有閃爍效果可用

下面是color_ls檔案內容,因為怕控制碼造成討論區問題
用<Esc>表示在vi下按ctrl-v再按esc產生的碼^[
--------------------------------

<Esc>[44;30mget* <Esc>[44;31mget* <Esc>[44;32mget* <Esc>[44;33mget* <Esc>[44;34mget* <Esc>[44;35mget* <Esc>[44;36mget* <Esc>[44;37mget* <Esc>[42;30mget* <Esc>[42;31mget* <Esc>[42;32mget* <Esc>[42;33mget* <Esc>[42;34mget* <Esc>[42;35mget* <Esc>[42;36mget* <Esc>[42;37mget*
<Esc>[00;05;30mget* <Esc>[00;05;31mget* <Esc>[00;05;32mget* <Esc>[00;05;33mget* <Esc>[00;05;34mget* <Esc>[00;05;35mget* <Esc>[00;05;36mget* <Esc>[00;05;37mget* <Esc>[01;05;30mget* <Esc>[01;05;31mget* <Esc>[01;05;32mget* <Esc>[01;05;33mget* <Esc>[01;05;34mget* <Esc>[01;05;35mget* <Esc>[01;05;36mget* <Esc>[01;05;37mget*
<Esc>[05;30mget** <Esc>[05;31mget** <Esc>[05;32mget** <Esc>[05;33mget** <Esc>[05;34mget** <Esc>[05;35mget* <Esc>[05;36mget** <Esc>[05;37mget*<Esc>[00m***
<Esc>[00;05;37;43mget* <Esc>[00;05;36;43mget* <Esc>[00;05;35;43mget* <Esc>[00;05;34;43mget* <Esc>[00;05;33;43mget* <Esc>[00;05;32;43mget* <Esc>[00;05;31;43mget* <Esc>[00;05;30;43mget* <Esc>[01;05;37;41mget* <Esc>[01;05;36;41mget* <Esc>[01;05;35;41mget* <Esc>[01;05;34;41mget* <Esc>[01;05;33;41mget* <Esc>[01;05;32;41mget* <Esc>[01;05;31;41mget* <Esc>[01;05;30;41mget*<Esc>[00m
<Esc>[01;00;37;40mget* <Esc>[01;00;36;40mget* <Esc>[01;00;35;40mget* <Esc>[01;00;34;40mget* <Esc>[01;00;33;40mget* <Esc>[01;00;32;40mget* <Esc>[01;00;31;40mget* <Esc>[01;00;30;40mget* <Esc>[00;01;37;40mget* <Esc>[00;01;36;40mget* <Esc>[00;01;35;40mget* <Esc>[00;01;34;40mget* <Esc>[00;01;33;40mget* <Esc>[00;01;32;40mget* <Esc>[00;01;31;40mget* <Esc>[00;01;30;40mget*<Esc>[00m
<Esc>[01;00;37;41mget* <Esc>[01;00;36;41mget* <Esc>[01;00;35;41mget* <Esc>[01;00;34;41mget* <Esc>[01;00;33;41mget* <Esc>[01;00;32;41mget* <Esc>[01;00;31;41mget* <Esc>[01;00;30;41mget* <Esc>[00;01;37;41mget* <Esc>[00;01;36;41mget* <Esc>[00;01;35;41mget* <Esc>[00;01;34;41mget* <Esc>[00;01;33;41mget* <Esc>[00;01;32;41mget* <Esc>[00;01;31;41mget* <Esc>[00;01;30;41mget*<Esc>[00m
<Esc>[01;00;37;42mget* <Esc>[01;00;36;42mget* <Esc>[01;00;35;42mget* <Esc>[01;00;34;42mget* <Esc>[01;00;33;42mget* <Esc>[01;00;32;42mget* <Esc>[01;00;31;42mget* <Esc>[01;00;30;42mget* <Esc>[00;01;37;42mget* <Esc>[00;01;36;42mget* <Esc>[00;01;35;42mget* <Esc>[00;01;34;42mget* <Esc>[00;01;33;42mget* <Esc>[00;01;32;42mget* <Esc>[00;01;31;42mget* <Esc>[00;01;30;42mget*<Esc>[00m
<Esc>[01;00;37;43mget* <Esc>[01;00;36;43mget* <Esc>[01;00;35;43mget* <Esc>[01;00;34;43mget* <Esc>[01;00;33;43mget* <Esc>[01;00;32;43mget* <Esc>[01;00;31;43mget* <Esc>[01;00;30;43mget* <Esc>[00;01;37;43mget* <Esc>[00;01;36;43mget* <Esc>[00;01;35;43mget* <Esc>[00;01;34;43mget* <Esc>[00;01;33;43mget* <Esc>[00;01;32;43mget* <Esc>[00;01;31;43mget* <Esc>[00;01;30;43mget*<Esc>[00m
<Esc>[01;00;37;44mget* <Esc>[01;00;36;44mget* <Esc>[01;00;35;44mget* <Esc>[01;00;34;44mget* <Esc>[01;00;33;44mget* <Esc>[01;00;32;44mget* <Esc>[01;00;31;44mget* <Esc>[01;00;30;44mget* <Esc>[00;01;37;44mget* <Esc>[00;01;36;44mget* <Esc>[00;01;35;44mget* <Esc>[00;01;34;44mget* <Esc>[00;01;33;44mget* <Esc>[00;01;32;44mget* <Esc>[00;01;31;44mget* <Esc>[00;01;30;44mget*<Esc>[00m
<Esc>[01;00;37;45mget* <Esc>[01;00;36;45mget* <Esc>[01;00;35;45mget* <Esc>[01;00;34;45mget* <Esc>[01;00;33;45mget* <Esc>[01;00;32;45mget* <Esc>[01;00;31;45mget* <Esc>[01;00;30;45mget* <Esc>[00;01;37;45mget* <Esc>[00;01;36;45mget* <Esc>[00;01;35;45mget* <Esc>[00;01;34;45mget* <Esc>[00;01;33;45mget* <Esc>[00;01;32;45mget* <Esc>[00;01;31;45mget* <Esc>[00;01;30;45mget*<Esc>[00m
<Esc>[01;00;37;46mget* <Esc>[01;00;36;46mget* <Esc>[01;00;35;46mget* <Esc>[01;00;34;46mget* <Esc>[01;00;33;46mget* <Esc>[01;00;32;46mget* <Esc>[01;00;31;46mget* <Esc>[01;00;30;46mget* <Esc>[00;01;37;46mget* <Esc>[00;01;36;46mget* <Esc>[00;01;35;46mget* <Esc>[00;01;34;46mget* <Esc>[00;01;33;46mget* <Esc>[00;01;32;46mget* <Esc>[00;01;31;46mget* <Esc>[00;01;30;46mget*<Esc>[00m
<Esc>[01;00;37;47mget* <Esc>[01;00;36;47mget* <Esc>[01;00;35;47mget* <Esc>[01;00;34;47mget* <Esc>[01;00;33;47mget* <Esc>[01;00;32;47mget* <Esc>[01;00;31;47mget* <Esc>[01;00;30;47mget* <Esc>[00;01;37;47mget* <Esc>[00;01;36;47mget* <Esc>[00;01;35;47mget* <Esc>[00;01;34;47mget* <Esc>[00;01;33;47mget* <Esc>[00;01;32;47mget* <Esc>[00;01;31;47mget* <Esc>[00;01;30;47mget*<Esc>[00m
<Esc>[01;00;37;40m瘓 <Esc>[01;00;36;41m煜 <Esc>[01;00;35;42m祕 <Esc>[01;00;34;43m真 <Esc>[01;00;33;44m佇 <Esc>[01;00;32;45m君 <Esc>[01;00;31;46m鑑 <Esc>[01;00;30;47m縊 <Esc>[00;01;37;40m脢 <Esc>[00;01;36;41m緋 <Esc>[00;01;35;42m見 <Esc>[00;01;34;43m鐙 <Esc>[00;01;33;44m咿 <Esc>[00;01;32;45m貨 <Esc>[00;01;31;46m選 <Esc>[00;01;30;47m趨 <Esc>[00m

-------------------------------------------------------------------------------------
以上提供給bash的同好參考,為大家寫生動點的Shell吧! :P

先謝過jeffer兄的解答,待會看過man tput再做個實作給大家分享

想請教jeffer兄這種書上找不到的一手資料您是如何找到的?可否教教我。謝謝!

  • 實習板主
  • 活潑的大學生
  • ***
  • 文章數: 270
    • 檢視個人資料
Terminal 下彩色文字 tput 使用例
« 回覆 #3 於: 2002-06-10 11:29 »
man tput 及 man terminfo 看了一下,參數好多呀,但是對想寫Terminal程式的人會很有幫助
(對跑不動Xwindow的老機器User,Termial程式很有用的)XWindow下的Terminal也適用。

僅就上述Color Text部份簡單示例一下

tput sgr0          #取消所有顯示參數
tput setaf 0          #ansi方式 設定前景色(同樓上一樣內部是用<Esc> 控制碼)

tput setaf 1;echo "ABCDEF";tput sgr0  #色彩數值0~7 8是bold 9是half-bright)

tput setab 1         #............設定背景色(0~7)
tput bold          # 高亮度
tput blink          # 閃爍
tput smul         # 進入加底線模式  
tput ul         # 加底線

當然也包含了Termianl下操作的許多功能

tput cup 0 0   # 把游標移到首行的第一個字元
tput civis       # 藏掉游標
tput cnorm      # 回復游標
tput cvvis         # 方塊游標

其他的請自行查man terminfo 中的參數表

duncanlo

  • SA 苦力組
  • 俺是博士!
  • *****
  • 文章數: 7312
    • 檢視個人資料
以前作bbs站畫面時,
好像有個ansi-draw,
還有一個bbs站內的文字編輯器,
可以把字圖色或閃爍,
畫完再去看下什麼參數...我只會這樣作而已!

  • 實習板主
  • 活潑的大學生
  • ***
  • 文章數: 270
    • 檢視個人資料
Terminal 下彩色文字Bash printf 使用例
« 回覆 #5 於: 2002-06-10 12:11 »
上面那堆<Esc>夠煩人了,在man terminfo 中把規則講明了

printf "\E[0m"    #復原
printf "\E[0;4m" #加底線
printf "\E[0;5m"    #閃爍
printf "\E[0;7m"    #反轉
printf "\E[0;1m"    #高亮度
printf "\E[0;8m"    #看不見
printf "\E[0;31;45m"   #30~37表前景,40~47表背景
printf "\E[0;1;33;44m"  # 藍底亮黃字            etc.

jeffer

  • 懷疑的國中生
  • **
  • 文章數: 83
    • 檢視個人資料
Re: 測試出來的文字介面的彩色文字效果
« 回覆 #6 於: 2002-06-10 22:28 »
引述: "任俠"

想請教jeffer兄這種書上找不到的一手資料您是如何找到的?

用進階搜尋來找資料
例如  我要找  TPUT 的用法, 如果只打 TPUT 可能有幾十萬筆
那我就輸入  TPUT  LINUX SHELL  可能只有幾百筆 :D

  • 實習板主
  • 活潑的大學生
  • ***
  • 文章數: 270
    • 檢視個人資料
直接存取文字模式tty畫面
« 回覆 #7 於: 2002-06-20 11:51 »
原來在Linux下拍下tty畫面也很簡單

我預設的畫面是25X80

dd if=/dev/vcs1 of=capture_filename bs=2000 count=1

vi capture_filename 即可看到剛才tty1上的螢幕內容

如果是
dd if=/dev/vcsa1 of=capture_filename bs=4004 count=1

vi capture_filename 可看到剛才tty1上的螢幕內容及色彩編碼
結構是
前四個字元值 列數  每列字元數  游標位置列 游標水平位置
後面則是色彩字元前文字字元後的雙字元結構

只要 cat capture_filename > /dev/vcsa3

就可把剛才抓下的畫面秀在tty3上面,好玩吧!

可以輕易存下全螢幕文字畫面。 :P

  • 實習板主
  • 活潑的大學生
  • ***
  • 文章數: 270
    • 檢視個人資料
剛好 Jeffer兄在為我解答另一問題時提到 setterm 這個指令

前面使用 tput 並不會改到原來文字模式下內定的顯示參數,所以只要下一個 ls
就會使原先用tput設定的顏色失效,但setterm 則可用來改變你的文字模式顯示風格


setterm -default #設定回 Default 值設定
setterm -ulcolor blue #將文章強調字設成藍色
setterm -hbcolor green #設定在半亮度模式下的預設色彩為綠色
setterm -store #儲存現在的設定
setterm -bold on ; setterm -bold off
setterm -half on  ; setterm -half off
.....................

不多說了,直接 man setterm 看看吧!
包括 beep 及 hardcopy tty及tty的節電設定都在這兒!

duncanlo

  • SA 苦力組
  • 俺是博士!
  • *****
  • 文章數: 7312
    • 檢視個人資料
引述: "任俠"
包括 beep 及 hardcopy tty及tty的節電設定都在這兒!


忘了上次誰問powersave的東東,
下面是一小段setterm man page:
代碼: [選擇]
      -powersave on|vsync
              Puts the monitor into VESA vsync suspend mode.

       -powersave hsync
              Puts the monitor into VESA hsync suspend mode.

       -powersave powerdown
              Puts the monitor into VESA powerdown mode.

       -powersave [off]
              Turns off monitor VESA powersaving features.
              Puts the monitor into VESA vsync suspend mode.