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

10 उपयोगी Linux Bash_Completion पूर्ण कमांड उदाहरण (स्टेरॉयड पर बैश कमांड लाइन पूर्णता)

Linux में, एक कमांड टाइप करते समय यदि आप TAB को दो बार दबाते हैं, तो यह सभी उपलब्ध कमांडों को सूचीबद्ध करेगा जो टाइप किए गए वर्णों से शुरू होते हैं।

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

लेकिन, हम इस बैश पूर्णता को टर्बो-चार्ज कर सकते हैं, और इसे पूर्ण कमांड का उपयोग करके अगले स्तर तक ले जा सकते हैं।

यह ट्यूटोरियल बताता है कि प्रोग्रामेबल कंप्लीशन का उपयोग करके हम विकल्पों और कमांड के तर्कों के लिए स्वत:पूर्णता कैसे लागू कर सकते हैं। ऑपरेशन लिखने के लिए।

$ write [TAB][TAB]
bala raj
jason randy
john ritu
mayla thomas
nisha www-data

निम्नलिखित उदाहरण में, यह टेलनेट कमांड के लिए उपलब्ध होस्टनाम दिखाएगा:

$ telnet [TAB][TAB]
localhost dev-db fileserver

अपने टर्मिनल में प्रोग्राम योग्य पूर्णता प्राप्त करने के लिए, आपको बस /etc/bash_completion चलाने की आवश्यकता है जैसा कि नीचे दिखाया गया है,

# . /etc/bash_completion

आप नीचे दी गई पंक्तियों को /etc/bash.bashrc(ubuntu linux 13.04 से) में भी अनकम्मेंट कर सकते हैं ताकि आपको स्पष्ट रूप से ऊपर कमांड चलाने की आवश्यकता न पड़े,

<केंद्र>
 enable bash completion in interactive shells
if ! shopt -oq posix; then
 if [ -f /usr/share/bash-completion/bash_completion ]; then
 . /usr/share/bash-completion/bash_completion
 elif [ -f /etc/bash_completion ]; then
 . /etc/bash_completion
 fi
fi

यदि आपको ये पंक्तियाँ और /etc/bash_completion फ़ाइल नहीं मिलती है, तो आपको बस apt-get द्वारा bash_completion नामक पैकेज को स्थापित करने की आवश्यकता है

<एच3>1. मौजूदा बैश-पूर्णता देखें

प्रोग्राम करने योग्य बैश पूर्णता को सक्षम करने के बाद, परिभाषित बैश पूर्णता के सेट हैं। पूर्ण कमांड का उपयोग बैश पूर्णता को परिभाषित करने के लिए किया जाता है।

मौजूदा बैश पूर्णता को देखने के लिए, नीचे दिखाए अनुसार पूर्ण कमांड का उपयोग करें।

 
complete -p | less

उपरोक्त उदाहरण में विकल्प -p वैकल्पिक है।

<एच3>2. बैश में मानक पूर्णता की सूची

बैश डिफ़ॉल्ट रूप से लिनक्स उपयोगकर्ताओं के लिए निम्नलिखित मानक पूर्णता प्रदान करता है।

  1. चर नाम पूरा करना
  2. उपयोगकर्ता नाम पूर्णता
  3. होस्टनाम पूर्णता
  4. पथनाम पूर्णता
  5. फ़ाइल नाम पूर्णता

हमने इनके बारे में अपने पहले बैश मानक समापन लेख में चर्चा की थी।

<एच3>3. कमांड प्राप्त करने के लिए पूर्णता को परिभाषित करें

उपलब्ध कमांड की सूची को तर्क के रूप में प्राप्त करने के लिए -c कमांड के साथ पूर्णता को परिभाषित करें। निम्नलिखित उदाहरण में, पूर्णता को किस कमांड के लिए परिभाषित किया गया है,

$ complete -c which

$ which [TAB][TAB]
Display all 2116 possibilities? (y or n)

जैसा कि ऊपर देखा गया है, 'y' दबाने से सभी कमांड सूचीबद्ध हो जाएंगे।

<एच3>4. निर्देशिकाएँ प्राप्त करने के लिए पूर्णता को परिभाषित करें

विकल्प d के साथ, पूर्णता को केवल निर्देशिका नामों को तर्क के रूप में प्राप्त करने के लिए परिभाषित किया जा सकता है। निम्नलिखित उदाहरण में, ls के लिए परिभाषित पूर्णता,

$ ls
countfiles.sh dir1/ dir2/ dir3/

$ complete -d ls

$ ls [TAB][TAB]
dir1/ dir2/ dir3/

जैसा कि ऊपर देखा गया है, टैब दबाने से आपको केवल निर्देशिकाएं दिखाई देती हैं।

5. पृष्ठभूमि कार्य नाम प्राप्त करने के लिए पूर्णता को परिभाषित करें

पूर्ण रूप से, कमांड के तर्क के रूप में नौकरी के नाम प्राप्त करना भी संभव है। विकल्प j का उपयोग नौकरी के नाम को कमांड जॉब के तर्क के रूप में पास करने के लिए किया जाता है, जैसा कि नीचे दिखाया गया है,

$ jobs
[1]- Stopped cat
[2]+ Stopped sed 'p'

$ complete -j ./list_job_attrib.sh

$ ./list_job_attrib.sh [TAB][TAB]
cat sed

पृष्ठभूमि नौकरियों के बारे में बात करते हुए, आपको यह भी पता होना चाहिए कि इन उदाहरणों का उपयोग करके लिनक्स पृष्ठभूमि नौकरियों को कैसे प्रबंधित किया जाए।

<एच3>6. उपसर्ग और प्रत्यय के साथ पूर्णता

पूर्णताओं को जोड़ने के लिए वांछित उपसर्ग के साथ परिभाषित किया जा सकता है और वास्तविक पूर्णता के साथ जोड़ने के लिए प्रत्यय को परिभाषित किया जा सकता है। निम्नलिखित उदाहरण में, उपसर्ग और प्रत्यय को list_job_attrib.sh के लिए परिभाषित किया गया है,

$ jobs 
[1]+ Stopped cat

$ complete -P '">' -S '<"' ./list_job_attrib.sh

$ ./list_job_attrib.sh [TAB][TAB]

$ ./list_job_attrib.sh ">cat<"
<एच3>7. फ़ाइल नाम और निर्देशिका को बहिष्करण के साथ पूरा करना

विचार करें कि स्क्रिप्ट अपना रन पूरा करती है, आउटपुट निम्नानुसार आउटपुट निर्देशिका में लिखा गया है

$ cd output/

$ ls
all_calls.txt incoming_calls.txt outgoing_calls.txt missed_calls.txt
parser_mod.tmp extract.o

उपरोक्त में, यदि आपको ls कमांड के साथ स्वतः पूर्ण होने के लिए .tmp और .o फ़ाइलों को अनदेखा करने की आवश्यकता है, तो

$ export FIGNORE='.tmp:.o'

$ complete -f -d ls

$ cd output

$ ls [TAB][TAB]
all_calls.txt incoming_calls.txt outgoing_calls.txt missed_calls.txt

FIGNORE शेल वेरिएबल है जिसमें फ़ाइलनामों का प्रत्यय होता है और जिन्हें स्वतः-पूर्णता में बाहर रखा जाता है।

8. पूर्णता मान प्राप्त करने के लिए IFS द्वारा एक स्ट्रिंग विभाजित करें

शब्द सूची का उल्लेख -W विकल्प के साथ किया जा सकता है और यह IFS चर में मान के साथ विभाजित हो जाता है। फिर प्रत्येक परिणामी शब्द का विस्तार किया जाता है और पूरा होने के लिए प्रदर्शित किया जाएगा,

$ export IFS=" "

$ complete -W "bubble quick" ./sort_numbers.sh

$ ./sort_numbers.sh [TAB][TAB]
bubble quick

जैसा कि ऊपर कहा गया है, IFS सीमांक द्वारा स्ट्रिंग को विभाजित करने के बाद, शब्द का विस्तार हो जाता है, इसलिए इन्हें नीचे दिखाए गए चर के रूप में रखना भी संभव है,

$ echo $SORT_TYPE1
bubble

$ echo $SORT_TYPE2
quick

$ complete -W "$SORT_TYPE1 $SORT_TYPE2" ./sort_numbers.sh
$ ./sort_numbers.sh [TAB][TAB]
bubble quick

9. पूर्णता उत्पन्न करने के लिए अपना स्वयं का कार्य लिखें

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

_parser_options()
{
 local curr_arg;

 curr_arg=${COMP_WORDS[COMP_CWORD]}

 COMPREPLY=( $(compgen -W '-i --incoming -o --outgoing -m --missed' -- $curr_arg ) );
}

जहां उपरोक्त समारोह में,

  1. COMPREPLY :सरणी में पूर्णता परिणाम होते हैं जो [TAB][TAB]
  2. दबाने के बाद प्रदर्शित होते हैं
  3. COMP_WORDS :कमांड लाइन पर टाइप किए गए शब्दों की सरणी
  4. COMP_CWORD :COMP_WORDS सरणी के लिए अनुक्रमणिका और कमांड लाइन पर इस भिन्न स्थिति शब्दों का उपयोग करके पहुँचा जा सकता है।
  5. compgen :-W संभावित पूर्णता रखता है और संबंधित तर्क $current_arg
  6. के आधार पर चुना जाता है

फ़ाइल parser_option में मौजूद यह फ़ंक्शन नीचे दिखाए गए अनुसार सोर्स हो जाता है,

$ source parser_option

इस फ़ंक्शन को अपनी पार्सर स्क्रिप्ट से लिंक करें जैसा कि नीचे दिखाया गया है,

$ complete -F _parser_options ./parser.pl

$ ./parser.pl [TAB][TAB]
-i --incoming -o --outgoing -m --missed

जैसा कि ऊपर देखा गया है, पार्सर के विकल्प _parser_options() फ़ंक्शन द्वारा उत्पन्न होते हैं।

नोट :प्रोग्राम योग्य पूर्णता के लिए और फ़ंक्शन देखने के लिए /etc/bash_completion देखें।

<एच3>10. द्वितीयक युक्ति जब प्राथमिक कोई उत्पन्न नहीं करता है

यदि परिभाषित पूर्णता विनिर्देश द्वारा उत्पन्न कोई मिलान नहीं है, तो -o विकल्प के साथ उल्लिखित पूर्णता के लिए कॉम्प-विकल्प लिया जा रहा है।

$ complete -F _count_files -o dirnames ./countfiles.sh

ऊपर के रूप में, फ़ाइल ./countfiles.sh के लिए पूर्णता को _count_files फ़ंक्शन के साथ परिभाषित किया गया है। यदि _count_files() फ़ंक्शन कोई मिलान उत्पन्न नहीं करता है तो निर्देशिका पूर्ण करने का प्रयास किया जाता है।

$ ls 
countfiles.sh dir1/ dir2/ dir3/

$./countfiles.sh [TAB][TAB]
dir1 dir2 dir3

  1. उपयोगी लिनक्स कमांड लाइन बैश शॉर्टकट आपको पता होना चाहिए

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

  1. लिनक्स में प्रभावी बैश स्क्रिप्ट लिखने के लिए 10 उपयोगी टिप्स

    शेल स्क्रिप्टिंग प्रोग्रामिंग का सबसे आसान रूप है जिसे आप लिनक्स में सीख सकते हैं/कर सकते हैं। इसके अलावा, यह सिस्टम प्रशासन के लिए कार्यों को स्वचालित करने, नई सरल उपयोगिताओं/उपकरणों को विकसित करने के लिए एक आवश्यक कौशल है, लेकिन कुछ का उल्लेख करने के लिए। इस लेख में, हम प्रभावी और विश्वसनीय बैश स

  1. उदाहरण के साथ, लिनक्स में वॉच कमांड का उपयोग कैसे करें

    लिनक्स में वॉच कमांड एक काम करता है - एक कमांड को दोहराता है और परिणाम को बार-बार आउटपुट करता है, जिससे आप परिवर्तनों को देख सकते हैं। यहां इसका उपयोग करने का तरीका बताया गया है। कमांड सिंटैक्स देखें वॉच कमांड का सिंटैक्स इस प्रकार है: watch OPTIONS COMMAND ध्यान दें कि: विकल्प नीचे दी गई तालिका