bash: echo something to right end of window (right aligned)

后端 未结 3 685
日久生厌
日久生厌 2020-12-28 22:37

I am looking for producing success/fail messages which are right aligned in bash. An example would be what apache2 produces on executing: sudo /etc/init.d/apache2 relo

3条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-28 23:00

    Here is something mostly based on the centos 'functions' script, but more stripped down

    #!/bin/bash
    
    RES_COL=60
    MOVE_TO_COL="printf \\033[${RES_COL}G"
    
    DULL=0
    BRIGHT=1
    
    FG_BLACK=30
    FG_RED=31
    FG_GREEN=32
    FG_YELLOW=33
    FG_BLUE=34
    FG_MAGENTA=35
    FG_CYAN=36
    FG_WHITE=37
    
    ESC="^[["
    NORMAL="${ESC}m"
    RESET="${ESC}${DULL};${FG_WHITE};${BG_NULL}m"
    
    BLACK="${ESC}${DULL};${FG_BLACK}m"
    RED="${ESC}${DULL};${FG_RED}m"
    GREEN="${ESC}${DULL};${FG_GREEN}m"
    YELLOW="${ESC}${DULL};${FG_YELLOW}m"
    BLUE="${ESC}${DULL};${FG_BLUE}m"
    MAGENTA="${ESC}${DULL};${FG_MAGENTA}m"
    CYAN="${ESC}${DULL};${FG_CYAN}m"
    WHITE="${ESC}${DULL};${FG_WHITE}m"
    
    SETCOLOR_SUCCESS=$GREEN
    SETCOLOR_FAILURE=$RED
    SETCOLOR_NORMAL=$RESET
    
    echo_success() {
      $MOVE_TO_COL
      printf "["
      printf $SETCOLOR_SUCCESS
      printf $"  OK  "
      printf $SETCOLOR_NORMAL
      printf "]"
      printf "\r"
      return 0
    }
    
    echo_failure() {
      $MOVE_TO_COL
      printf "["
      printf $SETCOLOR_FAILURE
      printf $"FAILED"
      printf $SETCOLOR_NORMAL
      printf "]"
      printf "\r"
      return 1
    }
    
    action() {
      local STRING rc
    
      STRING=$1
      printf "$STRING "
      shift
      "$@" && echo_success $"$STRING" || echo_failure $"$STRING"
      rc=$?
      echo
      return $rc
    }
    
    action testing true
    action testing false
    

提交回复
热议问题