2011-03-31 66 views
8

我正在尋找生成在bash中右對齊的成功/失敗消息。一個例子是apache2在執行時產生的內容:sudo /etc/init.d/apache2 reloadbash:在窗口右端回顯一些東西(右對齊)

在上面的例子中,apache2產生非常好和簡潔的[OK][fail]消息,它們是右對齊的。

另外,很想知道如何獲得文本紅色,以防萬一,我們要產生一個[fail]消息。

+1

用printf;參見http://stackoverflow.com/questions/2199843/bourne-shell-left-right-justify – 2011-03-31 20:55:59

回答

7
#!/bin/bash 

RED=$(tput setaf 1) 
GREEN=$(tput setaf 2) 
NORMAL=$(tput sgr0) 

col=80 # change this to whatever column you want the output to start at 

if <some condition here>; then 
    printf '%s%*s%s' "$GREEN" $col "[OK]" "$NORMAL" 
else 
    printf '%s%*s%s' "$RED" $col "[FAIL]" "$NORMAL" 
fi 
+2

@SiegeX:'col = $(tput cols)'比硬編碼要好,並且與其他'tput'用途更一致。此外,您的方法爲顏色轉義消耗額外的空間,實際上並不佔用任何空間。 'printf'%s%* s%s'「$ GREEN」$ col'[OK]'「$ NORMAL」'可能更乾淨。 – geekosaur 2011-03-31 20:59:51

+0

@geek:我決定不用'輸入cols'和'輸入cup',因爲前者不給你指定列的靈活性(它可能不是最好的毛邊),後者需要#行。 – SiegeX 2011-03-31 21:04:41

+1

@SiegeX:你可以使用'tput hpa'作爲後者。 – geekosaur 2011-03-31 21:07:14

2

看一看這個線程,可能是有趣:how to write a bash script like the ones used in init.d?

在Linux CentOS的6.5,我使用的/etc/init.d/functions文件:

#!/bin/bash 
. /etc/init.d/functions # include the said file 

action "Description of the action" command 

exit 0 

假設command成功返回0,如果發生錯誤,則返回正值。 爲了讓腳本易於閱讀,我使用了函數調用而不是整個命令。

下面是一個例子:

#!/bin/bash 

. /etc/init.d/functions 

this_will_fail() 
{ 
    # Do some operations... 
    return 1 
} 

this_will_succeed() 
{ 
    # Do other operations... 
    return 0 
} 


action "This will fail"  this_will_fail 
action "This will succeed" this_will_succeed 

exit 0 

導致: console output (注:法語的語言環境;-))

希望對大家有所幫助!

+1

請注意,'/ etc/init.d/functions'的導入修改了'$ PATH'。 – epsilonhalbe 2017-03-22 10:39:25

0

這主要是基於CentOS的「功能」腳本什麼的,但更精簡

#!/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 
    "[email protected]" && echo_success $"$STRING" || echo_failure $"$STRING" 
    rc=$? 
    echo 
    return $rc 
} 

action testing true 
action testing false