2012-08-08 8 views
6

मैं वर्तमान में उत्पादन करने के लिए पिछले आदेश रन की वापसी कोड एक फ़ंक्शन को कॉल बैश में एक संकेत दिया है (यदि गैर शून्य):

exit_code_prompt() 
{ 
    local exit_code=$? 
    if [ $exit_code -ne 0 ] 
    then 
     tput setaf 1 
     printf "%s" $exit_code 
     tput sgr0 
    fi 
} 


PS1='$(exit_code_prompt)\$ ' 

यह नहीं बल्कि अच्छी तरह से काम करता है, $? के अलावा जब तक एक और आदेश को रीसेट नहीं चलाया जाता है:

$ echo "works" 
works 
$ command_not_found 
bash: command_not_found: command not found 
127$ 
127$ 
127$ 
127$ echo "works" 
works 
$ 

यह संभव पुनर्स्थापित करने के लिए सेट किए बिना माता पिता के लिए $? का मूल्य शैल पहली बार exit_code_prompt() इस तरह चलाया जाता है कि यह शीघ्र में मूल्य को दोहराने के लिए जारी रखने के लिए नहीं है है /?

बहुत धन्यवाद, स्टीव।

+0

आप ऐसा क्यों करना चाहते हैं? यदि आप कमांड लाइन पर मैन्युअल रूप से कुछ स्क्रिप्ट स्निपेट का परीक्षण करना चाहते हैं तो यह आपको अतिरिक्त परेशानी दे सकता है। – anishsane

उत्तर

3

समस्या यह है कि यदि आप कोई अन्य आदेश जारी नहीं करते हैं, तो $? बदल नहीं रहा है। तो जब आपका प्रॉम्प्ट पुनर्मूल्यांकन हो जाता है, तो यह सही ढंग से 127 उत्सर्जित कर रहा है। प्रॉम्प्ट पर मैन्युअल रूप से एक और कमांड टाइप करने के अलावा वास्तव में इसके लिए कोई समाधान नहीं है।

संपादित करें: असल में मैं झूठ बोला था, वहाँ हमेशा राज्य स्टोर करने के लिए तरीके हैं, तो आप $? का मूल्य की दुकान और देखें कि क्या यह बदल है सकते हैं, और शीघ्र स्पष्ट करता है, तो यह है। लेकिन चूंकि आप सबहेल में हैं, इसलिए आपके विकल्प बहुत सीमित हैं: आपको मूल्य को स्टोर करने के लिए फ़ाइल या कुछ समान रूप से गंदा उपयोग करना होगा।

+1

मुझे राज्य को स्टोर करने की आवश्यकता नहीं है, केवल प्रिंटफ के बाद इसे रीसेट करें यदि यह 0 के बराबर नहीं है --- मुझे पता है कि मैं इसे कब करना चाहता हूं, बस नहीं (और/या यदि यह संभव है) –

+0

@StephenWattam लेकिन अगर आप राज्य को स्टोर नहीं करते हैं, आप कमांड के तुरंत बाद प्रॉम्प्ट के बीच अंतर और कमांड के बाद प्रॉम्प्ट * नहीं * बता सकते हैं? – kojiro

+0

मैं एक अलग कोण से इस पर आ रहा था, '$?' का उपयोग कर राज्य के रूप में और इसे एक आउटपुट के बाद शून्य पर सेट कर रहा था। –

संबंधित मुद्दे