2011-03-31 17 views
8

मैं सफलता/असफल संदेशों का उत्पादन करने की तलाश में हूं जो बाश में सही गठबंधन हैं। एक उदाहरण क्या apache2 को क्रियान्वित करने पर उत्पन्न होते हैं: sudo /etc/init.d/apache2 reload आदिबैश: खिड़की के दाएं किनारे पर कुछ गूंजें (दाएं संरेखित)

उपरोक्त उदाहरण में, apache2 बहुत अच्छा और संक्षिप्त [OK] या [fail] संदेश जो सही गठबंधन कर रहे हैं पैदा करता है।

साथ ही, यह जानना अच्छा लगेगा कि टेक्स्ट लाल कैसे प्राप्त करें, अगर हम [fail] संदेश का उत्पादन कर रहे हैं।

+1

उपयोग printf; http://stackoverflow.com/questions/2199843/bourne-shell-left-right-justify –

उत्तर

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

@ घेराबंदी: 'col = $ (tput cols)' हार्डकोडिंग से बेहतर है और अन्य 'tput' उपयोगों के साथ अधिक संगत है । साथ ही, आपकी विधि रंग से बचने के लिए अतिरिक्त जगह खाती है, जो वास्तव में कोई स्थान नहीं लेती है। 'printf '% s% * s% s'" $ GREEN "$ col '[OK]'" $ NORMAL "' क्लीनर हो सकता है। – geekosaur

+0

@geek: मैंने 'tput cols 'और' tput cup' के खिलाफ भी निर्णय लिया क्योंकि पूर्व आपको स्तंभ निर्दिष्ट करने के लिए लचीलापन नहीं देता है (यह बालों वाले किनारे पर सबसे अच्छा नहीं दिख सकता है) और बाद वाले को पंक्ति # की आवश्यकता होती है। – SiegeX

+1

@ घेराबंदी: आप बाद के लिए 'tput hpa' का उपयोग कर सकते हैं। – geekosaur

2

इस सूत्र पर एक नज़र डालें, दिलचस्प हो सकता है:

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

action "Description of the action" command 

exit 0 

: how to write a bash script like the ones used in init.d?

लिनक्स CentOS 6.5 पर, मैं /etc/init.d/functions फ़ाइल उपयोग कर रहा हूँ मानते हैं कि command सफलता पर 0 लौटाता है, यदि कोई त्रुटि होती है तो सकारात्मक मूल्य। स्क्रिप्ट को पढ़ने में आसान होने के लिए, मैं पूरे कमांड के बजाय फ़ंक्शन कॉल का उपयोग करता हूं। console output :

#!/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 

में जिसके परिणामस्वरूप: (ध्यान दें: फ्रेंच स्थान ;-))

आशा है कि यह मदद करेंगे

यहाँ एक उदाहरण है!

+1

ध्यान दें कि '/ etc/init.d/functions' का आयात' $ PATH' को संशोधित करता है। – epsilonhalbe

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 
संबंधित मुद्दे