उबंटू को बैश स्क्रिप्ट के साथ स्थापित करने के बारे में अपनी हालिया पोस्ट में, मैंने संक्षेप में .bashrc
के जादू की ओर इशारा किया। . यह वास्तव में न्याय नहीं करता था, इसलिए यहां एक त्वरित पोस्ट है जो बैश कॉन्फ़िगरेशन फ़ाइल क्या कर सकती है इसके बारे में थोड़ा और विवरण प्रदान करती है।
मेरा वर्तमान कॉन्फ़िगरेशन मेरे वर्कफ़्लो में बहुत सुधार करता है, और मुझे 50% से अधिक कीस्ट्रोक्स बचाता है जो मुझे इसके बिना नियोजित करना होगा! आइए उपनामों, कार्यों और शीघ्र कॉन्फ़िगरेशन के कुछ उदाहरण देखें जो कम कुंजी प्रेस के साथ अधिक कुशल होने में हमारी सहायता करके हमारे वर्कफ़्लो को बेहतर बना सकते हैं।
बैश उपनाम
एक चतुराई से लिखा गया .bashrc
बहुत सारे कीस्ट्रोक्स बचा सकते हैं। हम बैश उपनाम, या स्ट्रिंग्स का उपयोग करके शाब्दिक अर्थों में इसका लाभ उठा सकते हैं जो बड़े आदेशों तक विस्तारित होते हैं। एक सांकेतिक उदाहरण के लिए, यहाँ टर्मिनल में फ़ाइलों की प्रतिलिपि बनाने के लिए एक बैश उपनाम है:
# Always copy contents of directories (r)ecursively and explain (v) what was done
alias cp='cp -rv'
alias
कमांड उस स्ट्रिंग को परिभाषित करता है जिसे हम टाइप करेंगे, उसके बाद वह स्ट्रिंग किस तक विस्तारित होगी। हम मौजूदा कमांड जैसे cp
. को ओवरराइड कर सकते हैं के ऊपर। अपने आप में, cp
कमांड केवल फाइलों की नकल करेगा, निर्देशिकाओं की नहीं, और चुपचाप सफल होता है। इस उपनाम के साथ, हमें उन दो झंडों को पारित करना याद रखने की आवश्यकता नहीं है, न ही cd
या ls
हमारी कॉपी की गई फ़ाइल का स्थान यह पुष्टि करने के लिए कि यह वहां है! अब, केवल वे दो प्रमुख प्रेस (c
. के लिए) और d
) वह सब हमारे लिए करेगा।
यहाँ कुछ और हैं .bashrc
सामान्य कार्यों के साथ फ़्लैग पास करने के लिए उपनाम।
# List contents with colors for file types, (A)lmost all hidden files (without . and ..), in (C)olumns, with class indicators (F)
alias ls='ls --color=auto -ACF'
# List contents with colors for file types, (a)ll hidden entries (including . and ..), use (l)ong listing format, with class indicators (F)
alias ll='ls --color=auto -alF'
# Explain (v) what was done when moving a file
alias mv='mv -v'
# Create any non-existent (p)arent directories and explain (v) what was done
alias mkdir='mkdir -pv'
# Always try to (c)ontinue getting a partially-downloaded file
alias wget='wget -c'
उपनाम तब काम आते हैं जब हम लंबी कमांड टाइप करने से बचना चाहते हैं। पायथन वातावरण के साथ काम करते समय मैं यहां कुछ का उपयोग करता हूं:
alias pym='python3 manage.py'
alias mkenv='python3 -m venv env'
alias startenv='source env/bin/activate && which python3'
alias stopenv='deactivate'
बैश उपनाम समय बचाने के तरीकों पर और प्रेरणा के लिए, मैं इस लेख में उदाहरणों की अत्यधिक अनुशंसा करता हूं।
बैश फ़ंक्शन
उपरोक्त उपनामों का एक नकारात्मक पहलू यह है कि वे अपेक्षाकृत स्थिर हैं - वे हमेशा घोषित पाठ तक विस्तृत होंगे। एक बैश उपनाम के लिए जो तर्क लेता है, हमें एक फ़ंक्शन बनाने की आवश्यकता होगी। हम ऐसा ऐसा कर सकते हैं:
# Show contents of the directory after changing to it
function cd () {
builtin cd "$1"
ls -ACF
}
मैं मिलान करना शुरू नहीं कर सकता कि मैंने कितनी बार cd
टाइप किया है और फिर ls
उस निर्देशिका की सामग्री को देखने के तुरंत बाद, जिसमें मैं अभी हूँ। इस फ़ंक्शन सेट अप के साथ, यह सब केवल उन दो अक्षरों के साथ होता है! फ़ंक्शन पहला तर्क लेता है, $1
, निर्देशिका को बदलने के लिए स्थान के रूप में, फिर उस निर्देशिका की सामग्री को फ़ाइल प्रकार संकेतकों के साथ अच्छी तरह से स्वरूपित कॉलम में प्रिंट करता है। builtin
इस डिफ़ॉल्ट कमांड को ओवरराइड करने की अनुमति देने के लिए बैश प्राप्त करने के लिए भाग आवश्यक है।
सॉफ्टवेयर डाउनलोड करने या अपग्रेड करने के मामले में भी बैश फंक्शन बहुत उपयोगी होते हैं। मैंने पहले हर दो सप्ताह में स्थिर साइट जनरेटर ह्यूगो के नए विस्तारित संस्करण को डाउनलोड करने में कम से कम कुछ मिनट बिताए, उनकी उत्कृष्ट शिपिंग आवृत्ति के लिए धन्यवाद। एक फ़ंक्शन के साथ, मुझे केवल संस्करण में पास होने की आवश्यकता है, और अपग्रेड कुछ ही सेकंड में होता है।
# Hugo install or upgrade
function gethugo () {
wget -q -P tmp/ https://github.com/gohugoio/hugo/releases/download/v"$@"/hugo_extended_"$@"_Linux-64bit.tar.gz
tar xf tmp/hugo_extended_"$@"_Linux-64bit.tar.gz -C tmp/
sudo mv -f tmp/hugo /usr/local/bin/
rm -rf tmp/
hugo version
}
$@
संकेतन केवल दिए गए सभी तर्कों को लेता है, फ़ंक्शन में अपना स्थान बदल देता है। उपरोक्त फ़ंक्शन को चलाने और ह्यूगो संस्करण 0.57.2 डाउनलोड करने के लिए, हम gethugo 0.57.2
कमांड का उपयोग करते हैं ।
मेरे पास गोलंग के लिए भी एक है:
function getgolang () {
sudo rm -rf /usr/local/go
wget -q -P tmp/ https://dl.google.com/go/go"$@".linux-amd64.tar.gz
sudo tar -C /usr/local -xzf tmp/go"$@".linux-amd64.tar.gz
rm -rf tmp/
go version
}
या उस फ़ंक्शन के बारे में क्या है जो GitLab के लिए एक दूरस्थ मूल URL को वर्तमान रिपॉजिटरी में जोड़ता है?
function glab () {
git remote set-url origin --add [email protected]:"$@"/"${PWD##*/}".git
git remote -v
}
glab username
. के साथ , हम एक नया origin
बना सकते हैं हमारे username
. के साथ वर्तमान Git रिपॉजिटरी के लिए URL GitLab.com पर। एक नए दूरस्थ URL पर पुश करने से स्वचालित रूप से एक नया निजी GitLab भंडार बन जाता है, इसलिए यह बैकअप बनाने के लिए एक उपयोगी शॉर्टकट है!
बैश फ़ंक्शन वास्तव में केवल स्क्रिप्टिंग की संभावनाओं से सीमित हैं, जिनमें से व्यावहारिक रूप से कुछ सीमाएं हैं। अगर हम बार-बार ऐसा कुछ करते हैं जिसके लिए टर्मिनल में कुछ पंक्तियों को टाइप करने की आवश्यकता होती है, तो हम शायद इसके लिए बैश फ़ंक्शन बना सकते हैं!
बैश प्रॉम्प्ट
निर्देशिका सामग्री के अलावा, हम जिस निर्देशिका में हैं, उसका पूरा पथ देखना भी उपयोगी है। बैश प्रॉम्प्ट हमें हमारी वर्तमान गिट शाखा जैसी अन्य उपयोगी जानकारी के साथ यह पथ दिखा सकता है। इसे और अधिक पठनीय बनाने के लिए, हम प्रांप्ट के प्रत्येक भाग के लिए रंगों को परिभाषित कर सकते हैं। यहां बताया गया है कि हम .bashrc
. में अपना प्रॉम्प्ट कैसे सेट कर सकते हैं इसे पूरा करने के लिए:
# Colour codes are cumbersome, so let's name them
txtcyn='\[\e[0;96m\]' # Cyan
txtpur='\[\e[0;35m\]' # Purple
txtwht='\[\e[0;37m\]' # White
txtrst='\[\e[0m\]' # Text Reset
# Which (C)olour for what part of the prompt?
pathC="${txtcyn}"
gitC="${txtpur}"
pointerC="${txtwht}"
normalC="${txtrst}"
# Get the name of our branch and put parenthesis around it
gitBranch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
# Build the prompt
export PS1="${pathC}\w ${gitC}\$(gitBranch) ${pointerC}\$${normalC} "
परिणाम:
~/github/myrepo (master) $
रंगों का नामकरण आसानी से यह पहचानने में मदद करता है कि एक रंग कहाँ से शुरू होता है और कहाँ रुकता है, और अगला कहाँ से शुरू होता है। हम अपने टर्मिनल में जो संकेत देखते हैं, वह निम्नलिखित स्ट्रिंग द्वारा परिभाषित किया जाता है export PS1
, एस्केप अनुक्रम के साथ प्रांप्ट सेट के प्रत्येक घटक के साथ। आइए इसे तोड़ दें:
\w
वर्तमान कार्यशील निर्देशिका प्रदर्शित करता है,\$(gitBranch)
gitBranch
. को कॉल करता है ऊपर परिभाषित फ़ंक्शन, जो वर्तमान गिट शाखा को प्रदर्शित करता है,\$
यदि आप एक सामान्य उपयोगकर्ता हैं या सामान्य उपयोगकर्ता मोड में हैं, तो "$" और यदि आप रूट हैं तो "#" प्रदर्शित करेंगे।
बैश एस्केप सीक्वेंस की पूरी सूची हमें समय और तारीख सहित कई और जानकारी प्रदर्शित करने में मदद कर सकती है! बैश संकेत अत्यधिक अनुकूलन योग्य और व्यक्तिगत हैं, इसलिए बेझिझक इसे किसी भी तरह से सेट अप करें।
यहां कुछ विकल्प दिए गए हैं जो जानकारी को सामने और केंद्र में रखते हैं और हमें अधिक कुशलता से काम करने में मदद कर सकते हैं।
विलंब-विपरीत के लिए
उपयोगकर्ता नाम और सेकंड के साथ वर्तमान समय, 24-घंटे HH:MM:SS प्रारूप में:
export PS1="${userC}\u ${normalC}at \t >"
user at 09:35:55 >
उन लोगों के लिए जो हमेशा यह जानना चाहते हैं कि वे कहां खड़े हैं
एक अलग लाइन पर पूर्ण फ़ाइल पथ, और उपयोगकर्ता नाम:
export PS1="${pathC}\w${normalC}\n\u:"
~/github/myrepo
user:
न्यूनतम के लिए
export PS1=">"
>
हम केवल मूल एस्केप अनुक्रमों के साथ कई व्यावहारिक संकेत बना सकते हैं; एक बार जब हम कार्यों को संकेतों के साथ एकीकृत करना शुरू करते हैं, जैसे कि गिट शाखा उदाहरण में, चीजें वास्तव में जटिल हो सकती हैं। जटिलता की यह मात्रा आपकी उत्पादकता में वृद्धि या हानि है, यह केवल आप ही निश्चित रूप से जान सकते हैं!
त्वरित खोज के साथ आसानी से उपलब्ध कार्यक्रमों के साथ कई फैंसी बैश संकेत संभव हैं। मैंने जानबूझकर यहां नमूने प्रदान नहीं किए हैं, क्योंकि, यदि आप इस सामान के बारे में जितना हो सके उतना उत्साहित हो सकते हैं, तो इस पोस्ट को पढ़ने से पहले आप जो कर रहे थे, उस पर वापस आने से कुछ घंटे पहले हो सकता है, और मैं बस अपने विवेक पर ऐसा नहीं कर सकता। ?
हम उम्मीद करते हैं कि निवेश किए गए समय और हमारी बैश कॉन्फ़िगरेशन फ़ाइल से प्राप्त उपयोगिता के बीच अब एक अच्छा संतुलन बना है! मुझे आशा है कि आप अपनी हाल ही में प्राप्त कीस्ट्रोक क्षमता का उपयोग अच्छे के लिए करेंगे।