Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Bash प्रोग्रामिंग

Bash प्रॉम्प्ट अनुकूलन में मास्टर करें: PS1-PS4 और PROMPT_COMMAND को ट्वीक करना

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

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> [नोट: प्रॉम्प्ट "username@hostname current-dir>" प्रारूप में बदल गया] 

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

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

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

ramesh@dev-db ~> vi ~/.bash_profile (या) ramesh@dev-db ~> vi ~/.bashrc [नोट: उपरोक्त फ़ाइलों में से किसी एक में export PS1="\u@\h \w> " जोड़ें]

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

2. PS2 - निरंतरता इंटरैक्टिव प्रॉम्प्ट

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

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 [नोट: यह निरंतरता प्रॉम्प्ट के लिए डिफ़ॉल्ट ">" का उपयोग करता है] 
 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 [नोट: यह संशोधित "continue-> " का उपयोग निरंतरता प्रॉम्प्ट के लिए करता है]

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

3. PS3 - शेल स्क्रिप्ट के अंदर "select" द्वारा उपयोग किया जाने वाला प्रॉम्प्ट

आप शेल स्क्रिप्ट के अंदर select लूप के लिए एक कस्टम प्रॉम्प्ट परिभाषित कर सकते हैं, 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 [नोट: यह select कमांड प्रॉम्प्ट के लिए डिफ़ॉल्ट "#?" प्रदर्शित करता है]

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 [नोट: यह select कमांड प्रॉम्प्ट के लिए संशोधित "Select a day (1-4): " प्रदर्शित करता है]

4. PS4 - "set -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 [नोट: यह 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 [नोट: यह set -x का उपयोग करके आउटपुट ट्रेस करते समय संशोधित "{script-name}.{line-number}+" प्रदर्शित करता है]

5. PROMPT_COMMAND

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

ramesh@dev-db ~> export PROMPT_COMMAND="date +%k:%m:%S" 22:08:42 ramesh@dev-db ~> [नोट: यह PROMPT_COMMAND और PS1 आउटपुट को अलग-अलग लाइनों पर प्रदर्शित करता है]

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

ramesh@dev-db ~> export PROMPT_COMMAND="echo -n [$(date +%k:%m:%S)]" [22:08:51]ramesh@dev-db ~> [नोट: यह PROMPT_COMMAND और PS1 आउटपुट को उसी लाइन पर प्रदर्शित करता है]
  1. Bash-it: स्क्रिप्ट्स, एलियास और कस्टम फंक्शन्स प्रबंधित करने के लिए परम बैश फ्रेमवर्क Bash-it: स्क्रिप्ट्स, एलियास और कस्टम फंक्शन्स प्रबंधित करने के लिए परम बैश फ्रेमवर्क

    Bash-it Bash 3.2+ के लिए सामुदायिक बैश कमांड और स्क्रिप्ट्स का एक बंडल है, जो ऑटोकंप्लीशन, थीम्स, एलियास, कस्टम फंक्शन्स और बहुत कुछ के साथ आता है। यह आपके दैनिक कार्य के लिए शेल स्क्रिप्ट्स और कस्टम कमांड्स को विकसित करने, बनाए रखने और उपयोग करने के लिए एक उपयोगी फ्रेमवर्क प्रदान करता है। यदि आप दै

  1. jm-shell: विस्तृत गतिविधि लॉग्स के साथ सुविधा-संपन्न, अनुकूलन योग्य बैश शेल jm-shell: विस्तृत गतिविधि लॉग्स के साथ सुविधा-संपन्न, अनुकूलन योग्य बैश शेल

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

  1. Linux Bash प्रॉम्प्ट को बेहतर बनाने के लिए 10 व्यावसायिक PS1 अनुकूलन Linux Bash प्रॉम्प्ट को बेहतर बनाने के लिए 10 व्यावसायिक PS1 अनुकूलन

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