जवाबों:
हां, दो तरीके हैं। एक में सेट करना PROMPT_COMMANDहै .bashrc, दूसरा - कमांड के PS1लिए कमांड प्रतिस्थापन स्थापित करना है echo $?।
विधि 1:
बैश मैनुअल पेज से:
PROMPT_COMMAND
If set, the value is executed as a command prior to issuing each primary prompt.
जो भी आप इस चर को सेट करते हैं, उसे हर बार प्रॉम्प्ट खींचने से पहले चलाया जाएगा। डेमो:
$> PROMPT_COMMAND=" echo 'Last command exited with' \$? 'code' "
Last command exited with 0 code
$> ls /etc/passwd > /dev/null
Last command exited with 0 code
$> ls /etc/asdf > /dev/null
ls: cannot access /etc/asdf: No such file or directory
Last command exited with 2 code
$>
के उपयोग पर ध्यान दें \$?। स्थायी परिवर्तन के लिए, इसे सहेजें.bashrc
विधि 2
मान लीजिए कि मेरा PS1संकेत इस तरह सेट है:
PS1='
user@ubuntu:$> '
अगर मैं हर बार कुछ प्रॉम्प्ट चलाना चाहता हूं, तो यह प्रॉम्प्ट स्क्रीन पर रिडर्न किया जाता है (जो कि प्रत्येक पूर्ववर्ती कमांड रन के बाद है), मुझे command substitution $(. . .) इसे प्रॉम्प्ट में उपयोग करने और सेट करने की आवश्यकता होगी :
PS1=' [ $? ]
user@ubuntu: $> '
डेमो:
$> PS1=' [ $? ]
> $>_ '
[ 0 ]
$>_ ls /etc/passwd > /dev/null
[ 0 ]
$>_ ls /etc/asdf > /dev/null
ls: cannot access /etc/asdf: No such file or directory
[ 2 ]
$>_
ध्यान दें कि मैंने अपने PS1 को दो लाइनों में विभाजित किया है, ऊपर [ exitcode ]और नीचे होगा $> <blank space>'। क्यों नहीं है यही कारण है >इससे पहले कि $> 'दूसरी पंक्ति पर (अग्रणी >है PS2बहु आदेश के लिए शीघ्र)। वैकल्पिक रूप से, आप ऐसा कुछ कर सकते हैं ( $'...'संरचना पर ध्यान दें ):
$> PS1=$'[ $? ] \n$> '
[ 0 ]
$>
PS1उपयोगकर्ता इनपुट प्राप्त करने से पहले मुद्रित होने वाला सिर्फ पाठ है - इससे अधिक कुछ नहीं। यह पैरामीटर विस्तार और कमांड प्रतिस्थापन के लिए प्रतिरक्षा नहीं है, इसलिए आप $(...)उदाहरण के लिए, इसमें कुछ भी डाल सकते हैं $( pwd )और यह वहां दिखाई देगा। मैंने लैपटॉप की बैटरी पावर दिखाने के लिए एक कस्टम स्क्रिप्ट के साथ उपयोग किया है, उदाहरण के लिए
एक विधि जो मैंने आर्क विकी से ली थी वह है trap ERR। trapएक संकेत प्राप्त होने पर, या कुछ अन्य घटनाओं के लिए कमांड चलाने के लिए बैश में उपयोग किया जाता है। ERRजब भी वर्तमान कमांड लाइन एक त्रुटि के साथ समाप्त होती है, तो एक जाल चलाया जाता है - वापसी मान 0. नहीं है (यदि यह सामान्य रूप से समाप्त हो गया, तो वापसी मूल्य स्पष्ट रूप से 0. होगा)
इसलिए, उदाहरण के लिए:
trap 'printf "\ncode %d\n\n" $?' ERR
फिर:
$ echo foo
foo
$ false
code 1
$
(नोट: echoआदेश के बाद कोई संदेश जो सफलतापूर्वक चला - इसका क्या मतलब है जब मैं एक कमांड टाइप करता हूं और टर्मिनल कुछ भी नहीं करता है? )
आर्क विकी टिप ने आगे बढ़कर संदेश को रंगीन किया, ताकि आपको एक ध्यान देने योग्य पीला संदेश मिले:
EC() { echo -e '\e[1;33m'code $?'\e[m\n'; }
trap EC ERR
प्रभाव:
वास्तव में, मुझे जो कुछ भी करने की ज़रूरत है codeवह आउटपुट में एक पीले रंग के लिए नजर रखना है ताकि एक कमांड विफल हो।