Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> बाश प्रोग्रामिंग

बैश शैल:PS1, PS2, PS3, PS4 और PROMPT_COMMAND का नियंत्रण लें

बैश शैल:PS1, PS2, PS3, PS4 और PROMPT_COMMAND का नियंत्रण लेंलिनक्स बैश शेल के साथ आपकी बातचीत बहुत सुखद हो जाएगी, यदि आप PS1, PS2, PS3, PS4 और PROMPT_COMMAND प्रभावी ढंग से। PS का मतलब शीघ्र कथन है। यह लेख आपको सरल उदाहरणों का उपयोग करते हुए लिनक्स कमांड प्रॉम्प्ट पर्यावरण चर पर एक जम्पस्टार्ट देगा।

<एच3>1. PS1 - डिफ़ॉल्ट इंटरैक्शन प्रॉम्प्ट

आपके Linux पर डिफ़ॉल्ट इंटरैक्टिव प्रॉम्प्ट को संशोधित किया जा सकता है जैसा कि नीचे दिखाया गया है ताकि कुछ उपयोगी और सूचनात्मक हो। निम्नलिखित उदाहरण में, डिफ़ॉल्ट PS1 "\s-\v\$" था, जो शेल नाम और संस्करण संख्या प्रदर्शित करता है। नीचे दिखाए गए अनुसार उपयोगकर्ता नाम, होस्टनाम और वर्तमान कार्यशील निर्देशिका नाम प्रदर्शित करने के लिए इस डिफ़ॉल्ट व्यवहार को बदलें।

-bash-3.2$ export PS1="\u@\h \w> "

ramesh@dev-db ~> cd /etc/mail
ramesh@dev-db /etc/mail>
[Note: Prompt changed to "username@hostname current-dir>" format] 

इस उदाहरण में निम्नलिखित PS1 कोड का उपयोग किया गया है:

  • \u - उपयोगकर्ता नाम
  • \h - होस्टनाम
  • \w - वर्तमान निर्देशिका का पूर्ण पथनाम। कृपया ध्यान दें कि जब आप होम डायरेक्टरी में होते हैं, तो यह केवल ~ प्रदर्शित करेगा जैसा कि ऊपर दिखाया गया है
  • ध्यान दें कि PS1 के मान में अंत में एक स्थान है। व्यक्तिगत रूप से, मैं बेहतर पठनीयता के लिए संकेत के अंत में एक स्थान पसंद करता हूं।

नीचे दिखाए गए अनुसार .bash_profile (या) .bashrc में Export PS1="\u@\h \w> " जोड़कर इस सेटिंग को स्थायी बनाएं।

ramesh@dev-db ~> vi ~/.bash_profile (or)
ramesh@dev-db ~> vi ~/.bashrc
[Note: Add export PS1="\u@\h \w> " to one of the above files]

अगली पोस्ट में, मैं PS1 के उपयोग के कई व्यावहारिक उदाहरणों के बारे में विस्तार से लिखूंगा।

<एच3>2. PS2 - निरंतरता संवादात्मक संकेत

एक बहुत लंबे यूनिक्स कमांड को लाइन के अंत में \ देकर मल्टीपल लाइन में तोड़ा जा सकता है। मल्टी-लाइन कमांड के लिए डिफ़ॉल्ट इंटरेक्टिव प्रॉम्प्ट ">" है। जैसा कि नीचे दिखाया गया है, हम PS2 पर्यावरण चर का उपयोग करके "जारी रखें->" प्रदर्शित करने के लिए इस डिफ़ॉल्ट व्यवहार को बदलते हैं।

ramesh@dev-db ~> myisamchk --silent --force --fast --update-state \
> --key_buffer_size=512M --sort_buffer_size=512M \
> --read_buffer_size=4M --write_buffer_size=4M \
> /var/lib/mysql/bugs/*.MYI
[Note: This uses the default ">" for continuation prompt]

ramesh@dev-db ~> export PS2="continue-> "

ramesh@dev-db ~> myisamchk --silent --force --fast --update-state \
continue-> --key_buffer_size=512M --sort_buffer_size=512M \
continue-> --read_buffer_size=4M --write_buffer_size=4M \
continue-> /var/lib/mysql/bugs/*.MYI
[Note: This uses the modified "continue-> " for continuation prompt]

मैंने इसे बहुत उपयोगी और पढ़ने में आसान पाया, जब मैंने \ का उपयोग करके अपने लंबे आदेशों को कई पंक्तियों में तोड़ दिया। मैंने अन्य लोगों को भी देखा है जो लंबे आदेशों को तोड़ना पसंद नहीं करते हैं। आपकी पसंद क्या है? क्या आप लंबी कमांड को कई पंक्तियों में तोड़ना पसंद करते हैं?

<केंद्र> <एच3>3. PS3 - शेल स्क्रिप्ट के अंदर "सेलेक्ट" द्वारा इस्तेमाल किया जाने वाला प्रॉम्प्ट

जैसा कि नीचे बताया गया है, आप PS3 पर्यावरण चर का उपयोग करके शेल स्क्रिप्ट के अंदर चुनिंदा लूप के लिए एक कस्टम प्रॉम्प्ट परिभाषित कर सकते हैं।

शेल स्क्रिप्ट और PS3 के बिना आउटपुट:

ramesh@dev-db ~> cat ps3.sh

select i in mon tue wed exit
do
 case $i in
 mon) echo "Monday";;
 tue) echo "Tuesday";;
 wed) echo "Wednesday";;
 exit) exit;;
 esac
done

ramesh@dev-db ~> ./ps3.sh

1) mon
2) tue
3) wed
4) exit
#? 1
Monday
#? 4
[Note: This displays the default "#?" for select command prompt]


शेल स्क्रिप्ट और PS3 के साथ आउटपुट:

ramesh@dev-db ~> cat ps3.sh

PS3="Select a day (1-4): "
select i in mon tue wed exit
do
 case $i in
 mon) echo "Monday";;
 tue) echo "Tuesday";;
 wed) echo "Wednesday";;
 exit) exit;;
 esac
done

ramesh@dev-db ~> ./ps3.sh
1) mon
2) tue
3) wed
4) exit
Select a day (1-4): 1
Monday
Select a day (1-4): 4
[Note: This displays the modified "Select a day (1-4): "
 for select command prompt]
<एच3>4. PS4 - ट्रेसिंग आउटपुट को प्रीफ़िक्स करने के लिए "सेट -x" द्वारा उपयोग किया जाता है

जब आप किसी शेल स्क्रिप्ट को डिबग मोड में निष्पादित करते हैं, जैसा कि नीचे दिखाया गया है, PS4 शेल वैरिएबल उस प्रॉम्प्ट को परिभाषित करता है जो प्रदर्शित होता है।

शेल स्क्रिप्ट और PS4 के बिना आउटपुट:

ramesh@dev-db ~> cat ps4.sh

set -x
echo "PS4 demo script"
ls -l /etc/ | wc -l
du -sh ~

ramesh@dev-db ~> ./ps4.sh

++ echo 'PS4 demo script'
PS4 demo script
++ ls -l /etc/
++ wc -l
243
++ du -sh /home/ramesh
48K /home/ramesh
[Note: This displays the default "++" while tracing the output using set -x]


PS4 के साथ शेल स्क्रिप्ट और आउटपुट:
ps4.sh में नीचे परिभाषित PS4 में निम्नलिखित दो कोड हैं:

  • $0 - स्क्रिप्ट के नाम को इंगित करता है
  • $LINENO - स्क्रिप्ट के भीतर वर्तमान लाइन नंबर प्रदर्शित करता है
ramesh@dev-db ~> cat ps4.sh

export PS4='$0.$LINENO+ '
set -x
echo "PS4 demo script"
ls -l /etc/ | wc -l
du -sh ~

ramesh@dev-db ~> ./ps4.sh
../ps4.sh.3+ echo 'PS4 demo script'
PS4 demo script
../ps4.sh.4+ ls -l /etc/
../ps4.sh.4+ wc -l
243
../ps4.sh.5+ du -sh /home/ramesh
48K /home/ramesh
[Note: This displays the modified "{script-name}.{line-number}+"
 while tracing the output using set -x]

5. PROMPT_COMMAND

बैश शेल PS1 चर प्रदर्शित करने से ठीक पहले PROMPT_COMMAND की सामग्री को निष्पादित करता है।

ramesh@dev-db ~> export PROMPT_COMMAND="date +%k:%m:%S"
22:08:42
ramesh@dev-db ~>
[Note: This displays the PROMPT_COMMAND and PS1 output on different lines]

यदि आप PROMPT_COMMAND का मान PS1 के समान पंक्ति में प्रदर्शित करना चाहते हैं, तो नीचे दिखाए अनुसार इको -n का उपयोग करें।

ramesh@dev-db ~> export PROMPT_COMMAND="echo -n [$(date +%k:%m:%S)]"
[22:08:51]ramesh@dev-db ~>
[Note: This displays the PROMPT_COMMAND and PS1 output on the same line]

यदि आपको यह लेख पसंद आया हो, तो कृपया इसे del.icio.us and Stumble पर बुकमार्क कर लें। नीचे दिए गए लिंक का उपयोग करके, 'आगे क्या?' अनुभाग के अंतर्गत।


  1. बैश-इट - बैश फ्रेमवर्क आपकी लिपियों और उपनामों को नियंत्रित करने के लिए

    बैश-इट बैश 3.2+ . के लिए समुदाय बैश कमांड और स्क्रिप्ट का एक बंडल है , जो स्वतः पूर्णता, थीम, उपनाम, कस्टम फ़ंक्शन, और बहुत कुछ के साथ आता है। यह आपके दैनिक कार्य के लिए शेल स्क्रिप्ट और कस्टम कमांड के विकास, रखरखाव और उपयोग के लिए एक उपयोगी ढांचा प्रदान करता है। यदि आप दैनिक आधार पर बैश शेल का उपय

  1. जेएम-शेल - एक अत्यधिक जानकारीपूर्ण और अनुकूलित बैश शैल

    जेएम-शेल एक मुक्त खुला स्रोत, छोटा, अत्यधिक जानकारीपूर्ण और अनुकूलित बैश शेल है, जो आपको आपकी शेल गतिविधि के साथ-साथ कुछ उपयोगी सिस्टम जानकारी जैसे सिस्टम लोड औसत, लैपटॉप / कंप्यूटर की बैटरी स्थिति और बहुत कुछ के बारे में जानकारी का एक बड़ा खजाना देता है। महत्वपूर्ण रूप से, बैश . के विपरीत जो केवल

  1. बैश शेल PS1:एंजेलिना जोली की तरह अपने लिनक्स को शीघ्र बनाने के लिए 10 उदाहरण

    फोटो f1r3storm85 के सौजन्य से पिछले लेख में, हमने Linux पर्यावरण चर PS[1-4] और PROMPT_COMMAND के बारे में चर्चा की थी। यदि प्रभावी ढंग से उपयोग किया जाता है, तो PS1 कमांड प्रॉम्प्ट पर ही बहुमूल्य जानकारी प्रदान कर सकता है। टॉम्ब रेडर में, एंजेलिना जोली के पास शैली में रहस्य को सुलझाने के लिए सभी ग