Linux tput

tput 가 뭐 예요?tput 명령 은 terminfo 데이터 베 이 스 를 통 해 터미널 세 션 을 초기 화하 고 조작 합 니 다.사용 tput 을 통 해 커서 를 이동 하거나 변경 하거나 텍스트 속성 을 변경 하거나 터미널 화면의 특정 영역 을 제거 할 수 있 습 니 다.
terminfo 데이터베이스 란 무엇 입 니까?
UNIX 시스템 의 terminfo 데이터 베 이 스 는 터미널 과 프린터 의 속성 과 기능 을 정의 하 는 데 사 용 됩 니 다. 각 장치 (예 를 들 어 터미널 과 프린터) 의 줄 수 와 열 수, 이 장치 에 보 낼 텍스트 의 속성 을 포함 합 니 다.UNIX 의 몇 가지 상용 프로그램 은 terminfo 데이터베이스 에 의존 하여 이러한 속성 과 많은 다른 내용 을 제공 합 니 다. 그 중에서 vi 와 emacs 편집기, curses 와 man 프로그램 을 포함 합 니 다.
tput 명령 행 안내
UNIX 의 대부분의 명령 과 마찬가지 로 tput 명령 은 셸 명령 줄 에서 도 사용 할 수 있 고 셸 스 크 립 트 에서 도 사용 할 수 있 습 니 다.더 잘 이해 할 수 있 도록 tput 본 고 는 먼저 명령 행 에서 말 한 다음 에 셸 스 크 립 트 의 예 시 를 설명 합 니 다.
커서 속성
UNIX 셸 스 크 립 트 나 명령 줄 에서 커서 를 이동 하거나 커서 속성 을 변경 하 는 것 이 유용 할 수 있 습 니 다.어떤 경우 에는 민감 한 정보 (예 를 들 어 비밀번호) 를 입력 하거나 화면 에 있 는 두 개의 다른 영역 에 정 보 를 입력 해 야 할 수도 있 습 니 다.이러한 상황 에서 사용 tput 이 도움 이 될 수 있 습 니 다.
이동 커서
사용 tput 은 각 장치 에서 커서 를 이동 하 는 위 치 를 편리 하 게 실현 할 수 있다. tput 에서 cup 옵션 이나 커서 위 치 를 사용 하면 장치 의 줄 과 열 에서 임의의 X 또는 Y 좌표 로 커서 를 이동 할 수 있 습 니 다.장치 왼쪽 상단 의 좌 표 는 (0, 0) 입 니 다.
장치 에서 커서 를 5 열 (X) 의 첫 줄 (Y) 로 이동 하려 면 실행 tput cup 5 1 만 하면 됩 니 다.또 다른 예 는 tput cup 23 45 입 니 다. 이 명령 은 23 열 에 있 는 45 줄 로 커서 를 이동 시 킵 니 다.
커서 를 이동 하고 정 보 를 표시 합 니 다.
또 다른 유용 한 커서 포 지 셔 닝 기술 은 커서 를 이동 하여 정 보 를 표시 하 는 명령 을 실행 한 다음 이전 커서 위치 로 돌아 가 는 것 입 니 다.
(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"을 포함 하 십시오.
주의: 본 고 는 먼저 명령 행 을 통 해 실행 tput 하 는 것 을 상세 하 게 소개 하 였 기 때문에, 당신 은 자신의 subshell 에서 명령 을 실행 하 는 것 이 각 명령 을 단독으로 실행 하 는 것 보다 더 간결 하 다 고 느 낄 수 있 습 니 다.
커서 속성 변경
어떤 장치 에 데 이 터 를 표시 할 때 커서 를 보고 싶 지 않 을 때 가 많 습 니 다.커서 를 보이 지 않 는 것 으로 변환 하면 데이터 가 굴 러 갈 때의 화면 을 더욱 깨끗하게 보일 수 있 습 니 다.커서 를 보이 지 않 으 려 면 civis 옵션 (예 를 들 어 tput civis 을 사용 하 십시오.데이터 가 완전히 표 시 된 후에 커서 를 다시 볼 수 있 도록 cnorm 옵션 을 사용 할 수 있 습 니 다.
텍스트 속성
텍스트 의 디 스 플레이 방식 을 바 꾸 면 메뉴 의 한 단어 에 주의 하거나 중요 한 내용 에 주의 하 는 것 을 경계 할 수 있 습 니 다.텍스트 속성 을 다음 과 같이 변경 할 수 있 습 니 다. 텍스트 를 굵게 하고 텍스트 아래 에 밑줄 을 추가 하 며 배경 색상 과 전경 색상 을 변경 하고 색상 반전 방안 등 을 추가 할 수 있 습 니 다.
텍스트 의 색상 을 변경 하려 면 setb 옵션 (배경 색상 설정 에 사용) 과 setf 옵션 (전경 색상 설정 에 사용), terminfo 데이터베이스 에 분 배 된 색상 수 치 를 사용 하 십시오.일반적으로 분 배 된 수치 와 색상 의 대응 관 계 는 다음 과 같 지만 유 닉 스 시스템 에 따라 다 를 수 있 습 니 다.
  • 0: 검은색
  • 1: 파란색
  • 2: 녹색
  • 3: 청색
  • 4: 빨간색
  • 5: 양홍색
  • 6: 노란색
  • 7: 흰색
  • 다음 예제 명령 을 실행 하면 배경 색 을 노란색 으로 변경 하고 전경 색 을 빨간색 으로 변경 할 수 있 습 니 다.
    tput setb 6
    tput setf 4
    

    현재 색상 방안 을 반전 시 키 려 면 실행 tput rev 만 하면 됩 니 다.
    때로는 텍스트 착색 만 으로 는 부족 합 니 다. 즉, 다른 방식 으로 사용자 의 주 의 를 끌 려 고 합 니 다.두 가지 방식 으로 이 목적 을 달성 할 수 있다. 하 나 는 텍스트 를 굵 은 몸 으로 설정 하 는 것 이 고, 다른 하 나 는 텍스트 에 밑줄 을 추가 하 는 것 이다.
    텍스트 를 굵게 바 꾸 려 면 bold 옵션 을 사용 하 십시오.밑줄 을 추가 하려 면 smul 옵션 을 사용 하 십시오.밑줄 친 텍스트 를 표시 한 후 rmul 옵션 을 사용 하 십시오.
    셸 스 크 립 트 를 다음 단계 로 올 립 니 다.
    명령 행 에서 실행 tput 하 는 기본 지식 을 알 게 되 었 습 니 다. 배 운 지식 을 다른 기능 과 함께 셸 스 크 립 트 에 사용 하 는 방법 에 중점 을 두 겠 습 니 다.우선, tput 은 다음 과 같은 추가 기능 을 제공 합 니 다. 단말기 정보 (예 를 들 어 장치, 열, 줄 수) 를 추출 하고 화면의 데 이 터 를 제거 합 니 다.
    현재 열 수 (즉, 대상 장치 에서 사용 할 수 있 는 너비) 를 확인 하려 면 cols 옵션 을 사용 하 십시오.줄 수 (현재 높이) 를 찾 으 려 면 lines 옵션 을 사용 하 십시오.
    몇 가지 방법 으로 데 이 터 를 지 울 수 있 습 니 다. 구체 적 으로 필요 한 결과 에 달 려 있 습 니 다.현재 커서 위치 에서 줄 끝 까지 의 데 이 터 를 지 우려 면 사용 할 수 있 습 니 다 tput el.현재 커서 위치 에서 장치 끝 에 있 는 데 이 터 를 지 우려 면 사용 할 수 있 습 니 다 tput ed.전체 장 치 를 지 우려 면 사용 하 십시오 tput clear.
    모두 스 크 립 트 에 넣 기
    아래 코드 는 기본 메뉴 를 만 들 었 습 니 다.이 스 크 립 트 는 tput 에서 본 논문 에서 소개 한 여러 옵션 을 사용 하여 코드 를 강화 하 는 방법 을 소개 합 니 다.
     #!/bin/bash
    trap `get_window_size` WINCH                    # trap when a user has resized the window
    
    _UNDERLINE_ON=`tput smul`                       # turn on underline
    _UNDERLINE_OFF=`tput rmul`                     # turn off underline
    
    get_window_size() {
      _WINDOW_X=`tput lines`
      _WINDOW_Y=`tput cols`
    
      _FULL_SPACES=`echo ""|awk `
      {
        _SPACES = `${_WINDOW_Y}`
        while (_SPACES-- > 0) printf (" ")
      }'`
      _FULL_UNDERLINE=`echo "${_UNDERLINE_ON}${_FULL_SPACES}${_UNDERLINE_OFF}"`
    
      unset _FULL_SPACES
      show_menu
    
      return 0
    }
    
    set_color() {
      tput clear
      PS3="Enter Selection[1-9]:"
      select _COLOR in "Black" "Blue" "Green" "Cyan" "Red" "Magenta" "Yellow" "White" "Exit"
      do
        case ${REPLY} in
           [1-8])  _X=`expr ${REPLY} - 1`;;
               9)  break;;
               *)  echo "Invalid Color"; continue;;
        esac
    
        if [[ ${1} = "b" ]]
        then
          tput setb ${_X}
        else
          tput setf ${_X}
        fi
      done
    }
    
    show_menu() {
      while [[ -z ${_ANS} ]]
      do
        tput civis
        tput clear
    
            cat <<- EOF
                    Window Size: ${_WINDOW_X} / ${_WINDOW_Y}
    
                    Select => ${_UNDERLINE_ON}     ${_UNDERLINE_OFF}
    
                    ${_FULL_UNDERLINE}
                    B) Background Text Color
                    F) Foreground Text Color
    
                    X) Exit
            EOF
    
        tput rc
        tput smul
        tput cnorm
    
        read _ANS
        tput rmul
    
        case ${_ANS} in
          [Bb])  set_color "b";;
          [Ff])  set_color "f";;
          [Xx])  tput clear; exit;;
             *)
                 echo -e "Invalid Selection: ${_ANS}\c"
                 sleep 2
                 ;;
        esac
        unset _ANS
      done
    }
    
    tput sgr0
    tput civis
    tput clear
    tput cup 3 10
    tput sc
    tput cup 0 0
    
    [[ -n ${_ANS} ]] && unset _ANS
    get_window_size
    
    exit 0
    

    다음은 셸 스 크 립 트 를 분석 해 보 겠 습 니 다.
    스 크 립 트 를 설명 하 는 방식 을 설정 합 니 다.이 예 에서 사용 할 셸 은 Bash 입 니 다.WINCH 신호 에 함정 을 설치 하고 get_window_size 함 수 를 포 획 된 신호 의 트리거 로 지정 합 니 다.함정 을 설정 한 후 나중에 스 크 립 트 에 입력 할 때 사용 할 수 있 도록 두 변 수 를 정의 합 니 다.
    #!/bin/bash
    trap `get_window_size` WINCH                    # trap when a user has resized the window
    
    _UNDERLINE_ON=`tput smul`                       # turn on underline
    _UNDERLINE_OFF=`tput rmul`                      # turn off underline
    

    줄 수 와 열 수 를 확인 하기 위해 서 get_widow_size 라 는 함 수 를 만 듭 니 다.그 밖 에 정의 _FULL_UNDERLINE 변수, 장치 의 너비 (밑줄 이 있 음).
    get_window_size() {
      _WINDOW_X=`tput lines`
      _WINDOW_Y=`tput cols`
    
      _FULL_SPACES=`echo ""|awk `
      {
        _SPACES =`${_WINDOW_Y}`
        while (_SPACES-- > 0) printf (" ")
      }'`
      _FULL_UNDERLINE=`echo "${_UNDERLINE_ON}${_FULL_SPACES}${_UNDERLINE_OFF}"`
    
      unset _FULL_SPACES
      show_menu
    
      return 0
    }
    

    사용자 가 배경 과 전경 텍스트 색상 을 테스트 할 수 있 도록 set_color 라 는 함 수 를 만 듭 니 다.
    set_color() {
      tput clear
      PS3="Enter Selection[1-9]:"
      select _COLOR in "Black" "Blue" "Green" "Cyan" "Red" "Magenta" "Yellow" "White" "Exit"
      do
        case ${REPLY} in
           [1-8])  _X=`expr ${REPLY} - 1`;;
               9)  break;;
               *)  echo "Invalid Color"; continue;;
        esac
    
        if [[ ${1} = "b" ]]
        then
          tput setb ${_X}
        else
          tput setf ${_X}
        fi
      done
    }
    
    show_menu 이라는 함 수 를 만 들 고 이 함 수 를 통 해 장치 의 크기 를 보 여 줍 니 다.이 함수 에서 보 여 주 는 내용 은 커서 를 보이 지 않 는 것 으로 바 꾸 고 화면 을 지우 고 텍스트 를 인쇄 하 며 저 장 된 커서 위치 로 돌아 가 는 것 입 니 다.
    show_menu() {
      while [[ -z ${_ANS} ]]
      do
        tput civis
        tput clear
    
            cat <<- EOF
                    Window Size: ${_WINDOW_X} / ${_WINDOW_Y}
    
                    Select => ${_UNDERLINE_ON}     ${_UNDERLINE_OFF}
    
                    ${_FULL_UNDERLINE}
                    B) Background Text Color
                    F) Foreground Text Color
    
                    X) Exit
            EOF
    
        tput rc
        tput smul
        tput cnorm
    
        read _ANS
        tput rmul
    
        case ${_ANS} in
          [Bb])  set_color "b";;
          [Ff])  set_color "f";;
          [Xx])  tput clear; exit;;
             *)
                 echo -e "Invalid Selection: ${_ANS}\c"
                 sleep 2
                 ;;
        esac
        unset _ANS
      done
    }
    

    다음은 기본 커서 속성 을 설정 합 니 다.우선 sgr0 을 사용 하여 모든 속성 을 제거 할 수 있 습 니 다.커서 가 보이 지 않 고 화면 이 지 워 집 니 다.보이 지 않 는 커서 는 현재 (3, 10) 로 이동 합 니 다. 이 위 치 는 저장 되 고 커서 는 (0, 0) (왼쪽 상단) 으로 이동 합 니 다.
    tput sgr0
    tput civis
    tput clear
    tput cup 3 10
    tput sc
    tput cup 0 0
    

    마지막 으로 호출 get_window_size 함수 로 창 크기 를 가 져 와 function show 메뉴 를 호출 합 니 다.
    [[ -n ${_ANS} ]] && unset _ANS
    get_window_size
    
    exit 0
    

    종결 어tput 유 닉 스 의 셸 스 크 립 트 를 도입 하면 스 크 립 트 의 외관 을 개선 할 수 있 습 니 다.UNIX 에 서 는 수백 가지 방법 으로 하나의 임 무 를 수행 할 수 있 습 니 다. 왜 당신 의 방법 에 색채 와 개성 화 된 요 소 를 추가 하지 않 습 니까?학습 tput 은 매우 쉽 고 스 크 립 트 에 매우 효과 적일 수 있 습 니 다.사용 자 는 화면의 외관 을 더 많이 제어 하 는 데 도움 이 될 것 이다.당신 이 tput 을 사용 하여 무엇 을 할 수 있 는 지 에 대해 본 고 는 벽돌 을 던 져 옥 을 끌 어 올 리 는 역할 만 했 습 니 다.tput 과 아주 적은 작업량 을 통 해 매우 아름 답 고 전면적 인 메뉴 로 구동 되 는 셸 스 크 립 트 를 만 들 수 있 습 니 다!

    좋은 웹페이지 즐겨찾기