कुछ समय पहले, हमने 8 उपयोगी और दिलचस्प बैश संकेतों को सूचीबद्ध किया था। यह हमारे सबसे लोकप्रिय लेखों में से एक साबित हुआ, और अभी भी उपयोगकर्ता प्रतिक्रिया और प्रतिक्रिया उत्पन्न करता है। इस बार हमें कुछ और रत्न मिल गए हैं, साथ ही कुछ आसान टिप्स और चालें प्रोवर्बियल ब्लॉक पर सबसे अच्छे शेल प्रॉम्प्ट के लिए पाई गई हैं।

इन संकेतों का उपयोग करना

निम्नलिखित में से कुछ संकेत एक-लाइनर हैं, और सीधे (टर्मिनल) उपयोग के लिए आपके टर्मिनल में चिपकाया जा सकता है। उन्हें स्थायी बनाने के लिए, आपको कोड को अपने .bashrc या .bash_profile में पेस्ट करना होगा।

Twtty जैसे बड़े, अधिक जटिल संकेतों को अपनी स्क्रिप्ट फ़ाइल (जैसे myprompt.sh) में सहेजा जाना चाहिए, और आप एक रेखा जैसे

 स्रोत myprompt.sh 

अपनी .basrc फ़ाइल में उन्हें "आयात" करने के लिए।

बहुत शीघ्र

यह एक दो-पंक्ति संकेत है जिसमें उपयोगकर्ता नाम, होस्टनाम, कार्यशील निर्देशिका, समय और कमांड इतिहास संख्या सहित कुछ जानकारी है। तकनीकी और दृश्य जटिलता के कारण, इस प्रॉम्प्ट स्क्रिप्ट को अपनी फ़ाइल में रखना सबसे अच्छा है, फिर इसे ऊपर वर्णित अनुसार अपने .bashrc या .bash_profile से स्रोत करें।

 function prompt_command {TERMWIDTH = $ {COLUMNS} # प्रॉम्प्ट की चौड़ाई की गणना करें: hostnam = $ (echo -n $ HOSTNAME | sed -e "s /[\.].*//") # "व्हामी" और "pwd "एक पिछली नईलाइन usernam = $ (whoami) cur_tty = $ (tty | sed -e" s /.* tty \ (। * \) / \ 1 / ") newPWD =" $ {PWD} "# सभी को जोड़ें नीचे सहायक उपकरण ... promptsize = $ (echo -n "- ($ {usernam} @ $ {hostnam}: $ {cur_tty}) --- ($ {PWD}) -" \ | wc -c | tr -d "") fillsize = $ {TERMWIDTH} - $ {promptsize} fill = "" जबकि "$ fillsize" -gt "0"] भरें = "$ {fill} -" fillsize = $ {fillsize } -1 किया गया [अगर $ fillsize "-lt" 0 "] तो कट = 3 - $ {fillsize} newPWD =" ... $ (echo -n $ PWD | sed -e "s / \ (^। \ {$ cut \} \) \ (। * \) / \ 2 / ")" fi} PROMPT_COMMAND = prompt_command फ़ंक्शन ट्विटी {स्थानीय GRAY = "\ [\ 033 [1; 30m \]" स्थानीय LIGHT_GRAY = "\ [ \ 033 [0; 37 मीटर \] "स्थानीय सफेद =" \ [\ 033 [1; 37 मीटर \] "स्थानीय NO_COLOUR =" \ [\ 033 [0m \] "स्थानीय LIGHT_BLUE =" \ [\ 033 [1; 34 मीटर \ ] "स्थानीय YELLOW =" \ [\ 033 [1; 33m \] "xterm में केस $ TERM *) TITLEBAR = '\ [\ 033] 0; \ u @ \ h: \ w \ 007 \]' ;; *) TITLEBAR = "" ;; एएसएसी पीएस 1 = "$ TITLEBAR \ $ YELLOW- $ LIGHT_BLUE - (\ $ YELLOW \ $ उपयोगकर्ता $ LIGHT_BLUE @ $ YELLOW \ $ hostnam $ LIGHT_BLUE: $ WHITE \ $ cur_tty \ $ {LIGHT_BLUE}) - $ {YELLOW} - \ $ {fill} $ {LIGHT_BLUE} - (\ $ YELLOW \ $ {newPWD} \ $ LIGHT_BLUE) - $ YELLOW- \ \ n \ $ YELLOW- $ LIGHT_BLUE - (\ $ YELLOW \ $ (दिनांक +% एच% एम) $ LIGHT_BLUE: $ YELLOW \ $ (दिनांक \ "+% ए, % d% b% y \") \ $ LIGHT_BLUE: $ सफेद \ $$ LIGHT_BLUE) - \ $ YELLOW- \ $ NO_COLOUR "PS2 =" $ LIGHT_BLUE- $ पीला- $ पीला- $ NO_COLOUR "} 

इस प्रॉम्प्ट के बारे में ध्यान देने योग्य एक महत्वपूर्ण बात यह है कि क्षैतिज पट्टी आपके टर्मिनल की चौड़ाई को फिट करने के लिए स्केल करती है, और जब यह बहुत बड़ी हो जाती है तो कार्यशील निर्देशिका रेखा स्वयं को छोटा कर देती है।

यदि आपको उपरोक्त कोड स्निपेट के साथ कोई समस्या है, तो सादा पाठ संस्करण यहां डाउनलोड किया जा सकता है।

उच्च प्रदर्शन न्यूनतम न्यूनतम संकेत

टॉटी जैसे फैंसी प्रॉम्प्ट की सभी जटिलताओं में अतिरिक्त सीपीयू चक्र लगते हैं, और यह निश्चित रूप से आपके सिस्टम को रोकने के लिए नहीं जा रहा है, यह जोड़ सकता है। यदि आप ऐसा कुछ चाहते हैं जो आपको धीमा किए बिना बहुत सारी जानकारी पैक करता है, तो मैं यह सुझाव देता हूं:

 PS1 = "[\ d | \ T -> \ w ... \ $?] \ N #" 

यहां ध्यान देने योग्य एक दिलचस्प बात है परिवर्तनीय $ का उपयोग ? अतं मै। यह दर्ज अंतिम आदेश की निकास स्थिति का प्रतीक है। 0 का मतलब है कि सब ठीक है, कोई अन्य नंबर आमतौर पर एक त्रुटि इंगित करता है।

रोब का संकेत

यह इंटरनेट के चारों ओर तैरने वाले अधिक लोकप्रिय संकेतों में से एक है। कोड छोटा और सरल है, फिर भी यह बड़े, अधिक जटिल उदाहरणों में पाए जाने वाली कई सुविधाएं प्रदान करता है।

 PS1 = "\ [\ 033 [0; 33m \] [\!] \` अगर [[\ $? = "0"]]; फिर गूंजें "\\ [\\ 033 [32m \\]"; और गूंज "\\ [\\ 033 [31m \\]"; fi \ `[\ u। \ H: \` अगर [[pwd | wc -c | tr -d "" `> 18]]; फिर गूंजें" \\ डब्ल्यू "; और गूंजें" \\ w "; fi \`] \ $ \ [\ 033 [0m \] "; echo -ne "\ 033] 0; 'होस्टनाम-एस`:' pwd` \ 007" 

MegaFancyPrompt

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

नोट: सभी सुविधाओं को हर समय दिखाई नहीं दे रहा है, इसलिए स्क्रीनशॉट में यह अधिक दिखाई नहीं दे रहा है, लेकिन आप दृश्यमान हिस्सों को कैसे प्राप्त करें, इस बारे में विवरण के लिए यहां पूर्ण (दस्तावेज, टिप्पणी की गई) स्क्रिप्ट फ़ाइल देख सकते हैं।

 COLOR_WHITE = '\ 033 [1; 37m' COLOR_LIGHTGRAY = '033 [0; 37m' COLOR_GRAY = '\ 033 [1; 30m' COLOR_BLACK = '\ 033 [0; 30m' COLOR_RED = '\ 033 [0; 31m' COLOR_LIGHTRED = '\ 033 [1; 31 मीटर' COLOR_GREEN = '\ 033 [0; 32m' COLOR_LIGHTGREEN = '\ 033 [1; 32m' COLOR_BROWN = '\ 033 [0; 33m' COLOR_YELLOW = '\ 033 [1; 33m' COLOR_BLUE = '\ 033 [0; 34 मीटर' COLOR_LIGHTBLUE = '\ 033 [1; 34m' COLOR_PURPLE = '\ 033 [0; 35m' COLOR_PINK = '\ 033 [1; 35m' COLOR_CYAN = '\ 033 [0; 36m' COLOR_LIGHTCYAN = '\ 033 [1; 36 एम' COLOR_DEFAULT = '\ 033 [0m' # function_command को सेट करने के लिए फ़ंक्शन। function promptcmd () {history -a स्थानीय SSH_FLAG = 0 स्थानीय TTY = $ (tty | awk -F / dev / '{print $ 2}') यदि [[$ {TTY}]]; फिर स्थानीय SESS_SRC = $ (कौन | grep "$ TTY" | awk '{print $ 6}') fi # टाइटलबार केस $ {TERM} xterm * में) स्थानीय TITLEBAR = '\ [\ 033] 0; \ u @ \ h : {\ w} \ 007 \] ';; *) स्थानीय TITLEBAR = '' ;;; एएसएसी पीएस 1 = "$ {TITLEBAR}" # दिन परिवर्तन के लिए टेस्ट। अगर [-z $ दिन]; फिर निर्यात करें = $ (दिनांक +% ए) अन्य स्थानीय आज = ​​$ (दिनांक +% ए) यदि ["$ {DAY}"! = "$ {आज}"]; फिर PS1 = "$ {PS1} \ n \ [$ {COLOR_GREEN} \] दिन $ (दिनांक '+% ए, % d% बी% वाई') में बदल गया। \ n" निर्यात DAY = $ आज fi fi # उपयोगकर्ता अगर [$ {यूआईडी} -ईक 0]; तो अगर ["$ {USER}" == "$ {LOGNAME}"]; तो अगर [[$ {SUDO_USER}]]; फिर PS1 = "$ {PS1} \ [$ {COLOR_RED} \] \ u" अन्य PS1 = "$ {PS1} \ [$ {COLOR_LIGHTRED} \] \ u" fi else PS1 = "$ {PS1} \ [$ {COLOR_YELLOW} \] \ u "अगर अन्य [$ {USER} == $ {LOGNAME}]; फिर PS1 = "$ {PS1} \ [$ {COLOR_GREEN} \] \ u" अन्य PS1 = "$ {PS1} \ [$ {COLOR_BROWN} \] \ u" fi fi # HTTP प्रॉक्सी var कॉन्फ़िगर किया गया है या नहीं [- एन "$ http_proxy"]; फिर PS1 = "$ {PS1} \ [$ {COLOR_GREEN} \] @" अन्य PS1 = "$ {PS1} \ [$ {COLOR_LIGHTRED} \] @" fi # होस्ट करें [[$ {SSH_CLIENT}]] || [[$ {SSH2_CLIENT}]]; तो SSH_FLAG = 1 fi अगर [$ {SSH_FLAG} -eq 1]; फिर पीएस 1 = "$ {पीएस 1} \ [$ {COLOR_CYAN} \] \ h" elif [[-n $ {SESS_SRC}]]; तो अगर ["$ {SESS_SRC}" == "(: 0.0)"]; फिर PS1 = "$ {PS1} \ [$ {COLOR_GREEN} \] \ h" अन्य स्थानीय parent_process = `cat / proc / $ {PPID} / cmdline` अगर [[" $ parent_process "==" in.rlogind * " ]]; फिर पीएस 1 = "$ {पीएस 1} \ [$ {COLOR_BROWN} \] \ h" elif [["$ parent_process" == "in.telnetd *"]]; फिर पीएस 1 = "$ {पीएस 1} \ [$ {COLOR_YELLOW} \] \ h" अन्य PS1 = "$ {PS1} \ [$ {COLOR_LIGHTRED} \] \ h" fi fi elif [["$ {SESS_SRC}" = = ""]]]; फिर पीएस 1 = "$ {PS1} \ [$ {COLOR_GREEN} \] \ h" अन्य PS1 = "$ {PS1} \ [$ {COLOR_RED} \] \ h" fi # अलग स्क्रीन सत्र स्थानीय DTCHSCRN = $ (स्क्रीन - ls | grep -c अलग करें) यदि [$ {DTCHSCRN} -gt 2]; फिर पीएस 1 = "$ {पीएस 1} \ [$ {COLOR_RED} \] [scr: $ {DTCHSCRN}]" elif [$ {DTCHSCRN} -gt 0]; फिर पीएस 1 = "$ {पीएस 1} \ [$ {COLOR_YELLOW} \] [scr: $ {DTCHSCRN}]" fi # पृष्ठभूमि चल रही नौकरियां स्थानीय BKGJBS = $ (jobs -r | wc -l) अगर [$ {BKGJBS} - gt 2]; फिर पीएस 1 = "$ {पीएस 1} \ [$ {COLOR_RED} \] [बीजी: $ {बीकेजीजेबीएस}]" एलिफ [$ {बीकेजीजेबीएस} -जीटी 0]; फिर पीएस 1 = "$ {पीएस 1} \ [$ {COLOR_YELLOW} \] [बीजी: $ {बीकेजीजेबीएस}]" फाई # जॉब्स स्थानीय एसटीपीजेबीएस = $ (जॉब्स-एस | डब्ल्यूसी -एल) रोक दिया गया है अगर [$ {STPJBS} -gt 2]; फिर पीएस 1 = "$ {PS1} \ [$ {COLOR_RED} \] [stp: $ {STPJBS}]" elif [$ {STPJBS} -gt 0]; फिर पीएस 1 = "$ {PS1} \ [$ {COLOR_YELLOW} \] [stp: $ {STPJBS}]" fi # ब्रैकेट {अगर [$ {UID} -eq 0]; तो अगर ["$ {USER}" == "$ {LOGNAME}"]; तो अगर [[$ {SUDO_USER}]]; फिर पीएस 1 = "$ {PS1} \ [$ {COLOR_RED} \]" अन्यथा PS1 = "$ {PS1} \ [$ {COLOR_LIGHTRED} \]" fi else PS1 = "$ {PS1} \ [$ {COLOR_YELLOW} \ ] "अगर अन्य [" $ {USER} "==" $ {LOGNAME} "]; फिर पीएस 1 = "$ {PS1} \ [$ {COLOR_GREEN} \]" अन्यथा PS1 = "$ {PS1} \ [$ {COLOR_BROWN} \]" fi fi PS1 = "$ {PS1} {" # कार्य निर्देशिका अगर [ -w "$ {पीडब्ल्यूडी}"]; फिर पीएस 1 = "$ {पीएस 1} \ [$ {COLOR_GREEN} \] $ (prompt_workingdir)" अन्यथा PS1 = "$ {PS1} \ [$ {COLOR_RED} \] $ (prompt_workingdir)" fi # समापन ब्रैकेट} और $ \ # अगर [$ {यूआईडी} -ईक 0]; तो अगर ["$ {USER}" == "$ {LOGNAME}"]; तो अगर [[$ {SUDO_USER}]]; फिर पीएस 1 = "$ {PS1} \ [$ {COLOR_RED} \]" अन्यथा PS1 = "$ {PS1} \ [$ {COLOR_LIGHTRED} \]" fi else PS1 = "$ {PS1} \ [$ {COLOR_YELLOW} \ ] "अगर अन्य [" $ {USER} "==" $ {LOGNAME} "]; फिर पीएस 1 = "$ {PS1} \ [$ {COLOR_GREEN} \]" अन्यथा PS1 = "$ {PS1} \ [$ {COLOR_BROWN} \]" fi fi PS1 = "$ {PS1}} \ $ \ [$ { COLOR_DEFAULT} \] "} # स्क्रीन चौड़ाई फ़ंक्शन के लिए काम करने वाले डीआईआर को ट्रिम करें prompt_workingdir () {स्थानीय pwdmaxlen = $ (($ COLUMNS / 4)) स्थानीय trunc_symbol =" ... "अगर [[$ PWD == $ होम* ]]; फिर नया पीडब्ल्यूडी = "~ $ {पीडब्ल्यूडी # $ HOME}" अन्यथा नया पीडब्ल्यूडी = $ {पीडब्ल्यूडी} फाई [$ {# newPWD} -gt $ pwdmaxlen]; फिर स्थानीय pwdoffset = $ (($ {# newPWD} - $ pwdmaxlen + 3)) newPWD = "$ {trunc_symbol} $ {newPWD: $ pwdoffset: $ pwdmaxlen}" fi echo $ newPWD} # निर्धारित करें कि कौन सा संकेत प्रदर्शित करना है: # 1. स्क्रिप्ट द्वारा शैल सत्रों के लिए सरल कस्टम प्रॉम्प्ट प्रदर्शित करें #। # 2. Emacs या # xemacs के भीतर खोल सत्रों के लिए "ब्लेंड" प्रॉम्प्ट प्रदर्शित करें। # 3 अन्य सभी मामलों के लिए promptcmd प्रदर्शित करें। function load_prompt () {# पीआईडी ​​स्थानीय parent_process = $ प्राप्त करें (बिल्ली / proc / $ पीपीआईडी ​​/ cmdline | cut -d \। -f 1) स्थानीय my_process = $ (बिल्ली / proc / $$ / cmdline | cut -d \। -एफ 1) अगर [[$ parent_process == स्क्रिप्ट *]]; फिर PROMPT_COMMAND = "" PS1 = "\ t - \ # - \ u @ \ H {\ w} \ $" elif [[$ parent_process == emacs * || $ parent_process == xemacs *]]; फिर PROMPT_COMMAND = "" PS1 = "\ u @ \ h {\ w} \ $" अन्यथा निर्यात करें DAY = $ (दिनांक +% ए) PROMPT_COMMAND = promptcmd fi निर्यात PS1 PROMPT_COMMAND} load_prompt 

बोनस - सही रंग ढूंढना

जैसा कि आपने देखा होगा, इनमें से अधिकतर संकेत रंग का उपयोग करते हैं, और रंग को अक्सर कोडित रूप में '\ 033 [1; 30 मीटर' में दर्शाया जाता है, जो पढ़ने या याद रखने में काफी मुश्किल है। अपने सभी उपलब्ध रंगों को देखने का एक आसान तरीका, और पूर्वावलोकन करें कि वे किस तरह दिखेंगे, बस निम्न स्निपेट को अपने ब्राउज़र में पेस्ट करना है:

 मैं `सीक 1 7 में; seq 30 48; seq 90 107 `; echo -e "\ e [$ {i} mtest \ e [0m $ i" किया है 

जो प्रत्येक रंग कोड को इसके नंबर के साथ आउटपुट करेगा।

निष्कर्ष

निश्चित रूप से अनंत भिन्नताएं हैं जिन्हें आपके प्रॉम्प्ट में पैक किया जा सकता है। लगभग किसी भी प्रकार के पाठ डेटा को जोड़ा जा सकता है, और बैश के डेवलपर्स के पास कार्यक्षमता में जोड़ने के लिए दशकों थे। कुछ पाठकों ने प्रॉम्प्ट के भीतर से कस्टम पायथन या रूबी स्क्रिप्ट चलाने के बारे में भी टिप्पणी की है। आप जो कुछ भी करते हैं, इसे कार्यात्मक बनाएं, और यदि यह वास्तव में अच्छा है, तो हमें टिप्पणियों में एक लिंक छोड़ दें!