<span id="vexk9"><table id="vexk9"></table></span>

      tput

      通過terminfo數(shù)據(jù)庫對終端會話進行初始化和操作

      補充說明

      tput命令 將通過 terminfo 數(shù)據(jù)庫對您的終端會話進行初始化和操作。通過使用 tput,您可以更改幾項終端功能,如移動或更改光標、更改文本屬性,以及清除終端屏幕的特定區(qū)域。

      什么是 terminfo 數(shù)據(jù)庫?

      UNIX 系統(tǒng)上的 terminfo 數(shù)據(jù)庫用于定義終端和打印機的屬性及功能,包括各設(shè)備(例如,終端和打印機)的行數(shù)和列數(shù)以及要發(fā)送至該設(shè)備的文本的屬性。UNIX 中的幾個常用程序都依賴 terminfo 數(shù)據(jù)庫提供這些屬性以及許多其他內(nèi)容,其中包括 vi 和 emacs 編輯器以及 curses 和 man 程序。

      與 UNIX 中的大多數(shù)命令一樣,tput 命令既可以用在 shell 命令行中也可以用在 shell 腳本中。為讓您更好地理解 tput,本文首先從命令行講起,然后緊接著講述 shell 腳本示例。

      光標屬性

      在 UNIX shell 腳本中或在命令行中,移動光標或更改光標屬性可能是非常有用的。有些情況下,您可能需要輸入敏感信息(如密碼),或在屏幕上兩個不同的區(qū)域輸入信息。在此類情況下,使用 tput 可能會對您有所幫助。

      tput clear # 清屏
      tput sc # 保存當前光標位置
      tput cup 10 13 # 將光標移動到 row col
      tput civis # 光標不可見
      tput cnorm # 光標可見
      tput rc # 顯示輸出
      exit 0
      

      移動光標

      使用 tput 可以方便地實現(xiàn)在各設(shè)備上移動光標的位置。通過在 tput 中使用 cup 選項,或光標位置,您可以在設(shè)備的各行和各列中將光標移動到任意 X 或 Y 坐標。設(shè)備左上角的坐標為 (0,0)。

      要在設(shè)備上將光標移動到第 5 列 (X) 的第 1 行 (Y),只需執(zhí)行 tput cup 5 1。另一個示例是 tput cup 23 45,此命令將使光標移動到第 23 列上的第 45 行。

      移動光標并顯示信息

      另一種有用的光標定位技巧是移動光標,執(zhí)行用于顯示信息的命令,然后返回到前一光標位置:

      (tput sc ; tput cup 23 45 ; echo “Input from tput/echo at 23/45” ; tput rc)
      

      下面我們分析一下 subshell 命令:

      tput sc
      

      必須首先保存當前的光標位置。要保存當前的光標位置,請包括 sc 選項或“save cursor position”。

      tput cup 23 45
      

      在保存了光標位置后,光標坐標將移動到 (23,45)。

      echo “Input from tput/echo at 23/45”
      

      將信息顯示到 stdout 中。

      tput rc
      

      在顯示了這些信息之后,光標必須返回到使用 tput sc 保存的原始位置。要使光標返回到其上次保存的位置,請包括 rc 選項或“restore cursor position”。

      注意:由于本文首先詳細介紹了通過命令行執(zhí)行 tput,因此您可能會覺得在自己的 subshell 中執(zhí)行命令要比單獨執(zhí)行每條命令然后在每條命令執(zhí)行之前顯示提示更簡潔。

      更改光標的屬性

      在向某一設(shè)備顯示數(shù)據(jù)時,很多時候您并不希望看到光標。將光標轉(zhuǎn)換為不可見可以使數(shù)據(jù)滾動時的屏幕看起來更整潔。要使光標不可見,請使用 civis 選項(例如,tput civis)。在數(shù)據(jù)完全顯示之后,您可以使用 cnorm 選項將光標再次轉(zhuǎn)變?yōu)榭梢姟?/p>

      文本屬性

      更改文本的顯示方式可以讓用戶注意到菜單中的一組詞或警惕用戶注意某些重要的內(nèi)容。您可以通過以下方式更改文本屬性:使文本加粗、在文本下方添加下劃線、更改背景顏色和前景顏色,以及逆轉(zhuǎn)顏色方案等。

      要更改文本的顏色,請使用 setb 選項(用于設(shè)置背景顏色)和 setf 選項(用于設(shè)置前景顏色)以及在 terminfo 數(shù)據(jù)庫中分配的顏色數(shù)值。通常情況下,分配的數(shù)值與顏色的對應(yīng)關(guān)系如下,但是可能會因 UNIX 系統(tǒng)的不同而異:

      執(zhí)行以下示例命令可以將背景顏色更改為黃色,將前景顏色更改為紅色:

      tput setb 6 tput setf 4
      

      要反顯當前的顏色方案,只需執(zhí)行tput rev

      有時,僅為文本著色還不夠,也就是說,您想要通過另一種方式引起用戶的注意。可以通過兩種方式達到這一目的:一是將文本設(shè)置為粗體,二是為文本添加下劃線。

      要將文本更改為粗體,請使用 bold 選項。要開始添加下劃線,請使用 smul 選項。在完成顯示帶下劃線的文本后,請使用 rmul 選項。

      實例

      使輸出的字符串有顏色,底色,加粗:

      #!/bin/bash
      printf $(tput setaf 2; tput bold)'color show\n\n'$(tput sgr0)
      
      for((i=0; i<=7; i++)); do
          echo $(tput setaf $i)"show me the money"$(tput sgr0)
      done
      
      printf '\n'$(tput setaf 2; tput setab 0; tput bold)'background color show'$(tput sgr0)'\n\n'
      
      for((i=0,j=7; i<=7; i++,j--)); do
          echo $(tput setaf $i; tput setab $j; tput bold)"show me the money"$(tput sgr0)
      done
      
      exit 0
      

      輸出格式控制函數(shù):

      #!/bin/bash
      
      # $1 str       print string
      # $2 color     0-7 設(shè)置顏色
      # $3 bgcolor   0-7 設(shè)置背景顏色
      # $4 bold      0-1 設(shè)置粗體
      # $5 underline 0-1 設(shè)置下劃線
      
      function format_output(){
          str=$1
          color=$2
          bgcolor=$3
          bold=$4
          underline=$5
          normal=$(tput sgr0)
      
          case "$color" in
              0|1|2|3|4|5|6|7)
                  setcolor=$(tput setaf $color;) ;;
              *)
                  setcolor="" ;;
          esac
      
          case "$bgcolor" in
              0|1|2|3|4|5|6|7)
                  setbgcolor=$(tput setab $bgcolor;) ;;
              *)
                  setbgcolor="" ;;
          esac
      
          if [ "$bold" = "1" ]; then
              setbold=$(tput bold;)
          else
              setbold=""
          fi
      
          if [ "$underline" = "1" ]; then
              setunderline=$(tput smul;)
          else
              setunderline=""
          fi
      
          printf "$setcolor$setbgcolor$setbold$setunderline$str$normal\n"
      }
      
      format_output "Yesterday Once more" 2 5 1 1
      
      exit 0
      

      光標屬性例子:

      #!/bin/bash
      # clear the screen
      tput clear
      # Move cursor to screen location X,Y (top left is 0,0)
      tput cup 3 15
      # set a foreground colour using ANSI escape
      tput setaf 3
      echo "XYX Corp LTD."
      tput sgr0
      tput cup 5 17
      # Set reverse video mode
      tput rev
      echo "M A I N - M E N U"
      tput sgr0
      tput cup 7 15
      echo "1\. User Management"
      tput cup 8 15
      echo "2\. service Management"
      tput cup 9 15
      echo "3\. Process Management"
      tput cup 10 15
      echo "4\. Backup"
      # Set bold mode
      tput bold
      tput cup 12 15
      read -p "Enter your choice [1-4] " choice
      tput clear
      tput sgr0
      tput rc
      
      exit 0
      
      主站蜘蛛池模板: 狠狠色丁香婷婷综合久久来来去| 亚洲VA综合VA国产产VA中| 69国产成人综合久久精品91| 国产一级a爱做综合| 久久综合丁香激情久久| 亚洲av日韩综合一区在线观看| 中文字幕亚洲综合精品一区| 香蕉综合在线视频91| 久久综合精品视频| 色天使久久综合网天天| 久久99国产综合精品免费| 亚洲色偷偷综合亚洲AV伊人| 久久久亚洲裙底偷窥综合| 亚洲国产综合人成综合网站| 色欲老女人人妻综合网| 人人狠狠综合久久88成人| 国产综合成人色产三级高清在线精品发布 | 色综合天天色综合| 亚洲国产综合精品中文第一区| 国产成人综合亚洲绿色| 色偷偷亚洲第一综合| 亚洲精品二区国产综合野狼| 人人狠狠综合久久亚洲高清| 另类小说图片综合网| 麻豆久久婷婷五月综合国产| 丁香婷婷亚洲六月综合色| 久久一日本道色综合久久| 天天综合色天天桴色| 天天在线天天综合网色| 在线精品国产成人综合| 亚洲综合激情五月丁香六月| 91在线亚洲综合在线| 国产精品综合AV一区二区国产馆| 久久精品水蜜桃av综合天堂| 自拍 偷拍 另类 综合图片| 亚洲人成综合在线播放| 久久婷婷是五月综合色狠狠| 国产精品亚洲综合网站| 国产精品综合在线| 亚洲国产综合91精品麻豆| 久艾草国产成人综合在线视频|