अक्सर प्रयुक्त कमांड लाइन कमांड के लिए ऑटो पूर्ण?


15

कुछ परियोजनाओं के लिए मैं अक्सर एक जोड़े के आदेशों में टाइप करता हूं, उदाहरण के लिए:

cd an/extremely/long/path/in/which/I/have/some/kinda/project

तथा

./runmyproject --with some --command line --options set

यह देखकर कि मैं बहुत आलसी हूँ, मैं बार-बार उन आज्ञाओं को पूरा करने से बचने की कोशिश करता हूँ। इसलिए मैं निश्चित रूप से उन कमांड को वापस खोजने के लिए अप-की का उपयोग कर सकता हूं, लेकिन अक्सर, मेरे पास बीच में इतने सारे कमांड होते हैं, कि इसे खोजने में सिर्फ टाइप करने से भी अधिक समय लगता है।

मुझे अब आश्चर्य है कि अगर किसी प्रकार की उपयोगिता है जो एक पूर्ण कमांड का सुझाव दे सकती है जिसका मैं बहुत उपयोग करता हूं, जब मैंने अभी तक यह सब टाइप नहीं किया है। इसलिए कि मैं उदाहरण के लिए 'cd a /' टाइप कर सकता हूं और यह पहले से ही बाकी का रास्ता बताता है क्योंकि मैंने पिछले महीने इसे बहुत ज्यादा इस्तेमाल किया है।

मुझे बैश स्मार्ट कम्पलीट नामक कुछ मिला। लेकिन यह थोड़ा "गूंगा" है कि यह उन कमांडों को नहीं देखता है जो मैंने पहले इस्तेमाल किया था। मुझे अभी भी यह एसओ उत्तर मिला , जो मुझे एक फ़ाइल में बहुत सारे कमांड का उपयोग करने का सुझाव देता है। हालाँकि, यह पर्याप्त रूप से उत्तरदायी नहीं है कि मुझे हर बार नई परियोजनाएँ बनाने या फ़ोल्डर या प्रोग्राम तर्क बदलने के लिए एक नई फ़ाइल बनाने की आवश्यकता होगी।

किसी को भी किसी भी अन्य उपयोगिता या इसे प्राप्त करने का कोई अन्य तरीका पता है? या, किसी को भी पता होगा कि मैं बैश स्मार्ट कम्प्लीट को कैसे बदल सकता हूं ताकि वह पिछले महीने कहे जाने वाले कमांड को देख सके और जो कमांड फिट बैठता है उसे पूरा करे और पिछले महीने में सबसे ज्यादा इस्तेमाल किया गया है?

[संपादित करें] नीचे कुछ बेहतरीन जवाब दिए गए हैं। मैंने अभी तक किसी भी निश्चित उत्तर के रूप में चिह्नित नहीं किया है। इसलिए नहीं कि मुझे उत्तर पसंद नहीं हैं, मैं करता हूं, लेकिन क्योंकि उनमें से कोई भी एक पूर्ण विजेता नहीं है। मुझे लगता है कि फाइनलम एक शानदार प्रोजेक्ट है। दुर्भाग्य से यह किनारों के आसपास अभी भी उबड़-खाबड़ है। उदाहरण के लिए; यह अभी तक कॉपी-पेस्ट का समर्थन नहीं करता है। मैं हालांकि उस प्रोजेक्ट पर नजर रखूंगा, क्योंकि जब यह परिपक्व होगा तो मुझे लगेगा कि यह एक शानदार टर्मिनल ऐप होगा। जैसा कि अन्य उत्तरों के लिए है; उन्होंने या तो एक उपनाम बनाने का सुझाव दिया, जो वह नहीं है जो मैं करना चाहता हूं क्योंकि यह काम को दूर करने के बजाय अतिरिक्त काम बनाता है, या Ctrl + R का उपयोग कर रहा है, जो एक शानदार है (मुझे इसके बारे में पता नहीं था!)। कुछ लोगों ने Ctrl + R का उपयोग करने का सुझाव दिया, इसलिए मैं वास्तव में एक उत्तर को दूसरे पर उजागर नहीं कर सकता।

इसलिए अब मैं निश्चित रूप से Ctrl + R का उपयोग कर रहा हूं, और भविष्य में मैं अंतिम रूप का उपयोग कर सकता हूं।

सभी महान जवाब दोस्तों के लिए धन्यवाद!


2
आपको वास्तव में प्रयास करना चाहिए zsh। यह सब कुछ आप के लिए पूछ रहे हैं और बहुत अधिक प्रदान करता है। बाश से ज़श की ओर बढ़ना
बशारत सियालवी

BASH मैन पेज के अनुसार, फ़ंक्शन BASH में "गतिशील-पूर्ण-इतिहास" के रूप में भी मौजूद है। डिफ़ॉल्ट रूप से यह Alt + Tab के लिए बाध्य है जो इसे बेकार बनाता है, लेकिन कोई "बाइंड" के साथ बंधन को बदल सकता है।
बोरिस बुक

1
@ बशारतशिश खास तौर पर इस बारे में मदद करने के लिए क्या करता है?
पूली

जवाबों:


16

यदि कमांड अक्सर उपयोग किए जाते हैं, तो वे कमांड हिस्ट्री बैश ट्रैक में रिकॉर्ड किए जाते हैं .bash_history

अब चाल: आप CTRL-r दबाकर आदेशों को फिर से निष्पादित करने के लिए इस इतिहास को खोज सकते हैं ।

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

यह बैश में बनाया गया है, स्क्रिप्ट को कस्टमाइज़ करने या सॉफ़्टवेयर स्थापित करने की कोई आवश्यकता नहीं है :) यह बैश, इम्हो की सबसे उपयोगी विशेषताओं में से एक है।


3
इतिहास खोज मोड से बचने के लिए [ CTRL-g ] का उपयोग करें , यदि कोई कमांड निष्पादित नहीं कर रहा है (जैसे कि यदि आपको कोई ज़रूरत नहीं है तो नहीं मिलेगा)।
माउंटेनएक्स-फॉर-मोनिका

8

टर्मिनल स्क्रीन में निम्नलिखित (Ctrl-Shift-V) चिपकाएँ:

echo '"\e[A": history-search-backward' > ~/.inputrc
echo '"\e[B": history-search-forward' >> ~/.inputrc
echo 'set show-all-if-ambiguous on' >> ~/.inputrc
echo 'set completion-ignore-case on' >> ~/.inputrc

टर्मिनल स्क्रीन से बाहर निकलें (Ctrl-D), फिर फिर से टर्मिनल खोलें।

अब आप केवल पहले दो अक्षर टाइप कर सकते हैं, फिर फ़िल्टर की गई सूची में स्क्रॉल करने के लिए ऊपर या नीचे दबाएं


3
यह सबसे सरल उत्तर है जो काम करता है!
cxrodgers

8

अंतिम कार्यकाल

यह बहुत ही आशाजनक टर्मिनल ऐप है जिसे अंतिम शब्द कहा जाता है । इसकी कई विशेषताओं में, इसमें रीमर्बिंग कमांड का इतिहास भी है, ताकि आप इसे चुन सकें। यहाँ कुछ और विशेषताएं हैं:

अंतिम कार्यकाल

आप इस लेख में इसके बारे में अधिक पढ़ सकते हैं ।

यहाँ रचनाकारों से वेबसाइट है। http://finalterm.org/

इसे स्थापित करने के लिए

sudo add-apt-repository ppa:versable/finalterm-daily
sudo apt-get update
sudo apt-get install finalterm

चेतावनी

मैंने कहा है कि यह आशाजनक है। एकमात्र मुद्दा यह है कि यह संस्करण 0.1 पर है। तो कुछ चीजें पसंद हैं vimऔर nanoअभी तक अच्छी तरह से काम नहीं करते हैं। मैंने यह भी देखा है कि यह अभी तक ड्रैग-एंड-ड्रॉप और कॉपी और पेस्ट का समर्थन नहीं करता है। लेकिन इसमें आपके द्वारा अनुरोधित सुविधा है। जैसे ही सॉफ्टवेयर परिपक्व होता है, यह डेस्कटॉप के लिए सबसे अच्छे टर्मिनलों में से एक बन जाएगा।

स्क्रीनशॉट

यहाँ कार्रवाई में कार्य है:

 कार्य में क्रिया

उम्मीद है की यह मदद करेगा।

* मैं Saucy पर हूँ, इसलिए मैं एक समन्दर पृष्ठभूमि है :)


पारितोषिक के लिए धन्यवाद! मैंने अंतिम रूप से जाँच की और यह अच्छा लग रहा है। दुर्भाग्य से यह अभी तक कॉपी-पेस्ट का समर्थन नहीं करता है। मैंने Ctrl + V, Ctrl + Shift + V और राइट-क्लिक करने की कोशिश की, लेकिन उनमें से कोई भी काम नहीं कर रहा है। तो मैं भविष्य के लिए इसे ध्यान में रखूंगा!
kramer65

यह सबसे बड़ी कमी है जो मैंने देखी। हालांकि, परियोजना युवा है, और इसलिए मुझे उम्मीद है कि जल्द ही इसे जोड़ा जाएगा। मैं कॉपी-पेस्ट समर्थन के साथ एक टर्मिनल ऐप देख सकता हूं।
मैक्स टेरर

7

aliasअपने पूरे कमांड के लिए उपयोग करें , या निर्देशिका को अपने में जोड़ें $PATH। इसके अतिरिक्त, आपको निर्देशिकाओं को अपने निष्पादन योग्य (या स्क्रिप्ट, या जो कुछ भी) इसे चलाने के लिए बदलना नहीं है, तो यह काफी सरल है। परिवर्तनों के प्रभावी होने से पहले आपके द्वारा उपयोग किए जा रहे टर्मिनल को पुनरारंभ करने के लिए दोनों विधियों की आवश्यकता होती है।

bash aliasअपने उदाहरण के लिए बनाने का तरीका यहां बताया गया है (अपनी ~/.bashrcफ़ाइल में निम्न पंक्ति जोड़ें ):

alias runmyproject='an/extremely/long/path/in/which/I/have/some/kinda/project/runmyproject --with some --command line --options set'

इस तरह, आपको केवल runmyprojectविकल्प / तर्क निर्दिष्ट करने के बिना, टर्मिनल में इनपुट करना है ।

वैकल्पिक रूप से, आप अपने प्रोजेक्ट $PATHचर को अपने पर्यावरण चर में जोड़ सकते हैं । ऐसा करने के लिए, अपनी ~/.bashrcफ़ाइल में निम्न पंक्तियाँ जोड़ें :

PATH=an/extremely/long/path/in/which/I/have/some/kinda/project:$PATH
export PATH

इस स्थिति में आपको इसे चलाते समय अपने निष्पादन के लिए अपने विकल्पों / तर्कों को निर्दिष्ट करना होगा।


1
बात यह है कि मैं चाहूंगा कि टर्मिनल मेरे उपयोग के लिए उत्तरदायी हो। इसके साथ मुझे हर बार जब मैं नई परियोजनाओं पर काम करना शुरू करता हूं या जब मैं अपनी परियोजना की निर्देशिका संरचना को बदलता हूं तो मुझे उपनाम बदलना पड़ता है। मेरे प्रश्न का मुख्य भाग यह है कि मैं चाहता हूं कि मैं जो कुछ भी उपयोग करता हूं उससे सीखूं, बजाय इसके कि मैं यह बताऊं कि क्या करना है।
kramer65

ओह समझा। फिर वर्तमान में टॉप-रेटेड उत्तर को चाल करना चाहिए। या कम से कम बारीकी से।
oaskamay 20

4

जब मुझे खुद को अक्सर इस तरह एक निर्देशिका में बदलना पड़ता है:

cd an/extremely/long/path/in/which/I/have/some/kinda/project

मैं बस एक बार ऐसा करूंगा:

ln -s an/extremely/long/path/in/which/I/have/some/kinda/project ~/project

और तब से, उपयोग करें:

cd ~/pr[tab]

जब यह आता है:

./runmyproject --with some --command line --options set

मैं बैश इतिहास खोज का उपयोग करूंगा। कमांड प्रॉम्प्ट पर बस Ctrl-R दबाएं और 'runmy' टाइप करें। Voila, सभी विकल्पों के साथ पूरे कमांड के रूप में इसे अंतिम बार दर्ज किया गया था, वहीं फिर से दर्ज किया जाना है। अगर मुझे पिछली बार उपयोग किए गए विकल्प पसंद नहीं थे और मैं पहले वाले कमांड को देखना चाहता था, तो मैं सभी पिछले कमांड के माध्यम से "रनमी" को शामिल करने के लिए Ctrl-R दबाता रहूंगा।

यदि आप सिमलिंक विचार पसंद नहीं करते हैं, तो Ctrl-R इतिहास खोज 'cd' कमांड के साथ भी मदद कर सकती है। [Ctrl-R] ​​/ proj वास्तव में अंतिम कमांड को वापस लाने की संभावना है जो आपने उस निर्देशिका में सीडी का उपयोग किया था।

एक उपनाम जोड़ने या एक विशेष शेल में स्विच करने के बजाय, मैं हमेशा इस तरह की चीज़ की मदद करने के लिए डिज़ाइन किए गए बैश सुविधाओं का उपयोग करना सीखना पसंद करता हूं। इस तरह से मैं दूरस्थ मशीनों पर समान सुविधाओं का उपयोग कर सकता हूं या यदि मुझे किसी सहकर्मी के टर्मिनल पर बैठना है।


तुम्हारे सुझाव के लिए धन्यवाद। बात यह है कि मैं एक और चीज़ सेट नहीं करना चाहता, जिसका मैं ध्यान रखता हूं जब उदाहरण के लिए प्रोजेक्ट फ़ोल्डर बदलता है या मैं एक नई परियोजना शुरू करता हूं। बात यह है कि मैं चाहूंगा कि टर्मिनल मेरे उपयोग के लिए उत्तरदायी हो। मेरे प्रश्न का मुख्य भाग यह है कि मैं चाहता हूं कि मैं जो कुछ भी उपयोग करता हूं उससे सीखूं, बजाय इसके कि मैं यह बताऊं कि क्या करना है। मैं वास्तव में Ctrl-R फ़ंक्शन को पसंद करता हूं। उस एक के लिए धन्यवाद!
kramer65

4

अपने कीबोर्ड पर हिट कंट्रोल + r - यह आपको रिवर्स हिस्ट्री मोड में डाल देगा और आप जो जानते हैं उसे टाइप कर सकते हैं और पूरा कमांड दिखाएगा

यहां सूचीबद्ध अन्य तरीके हैं

http://www.talug.org/events/20030709/cmdline_history.html

मैं हालांकि नियंत्रण आर का उपयोग सबसे अधिक करता हूं


2

यह कोशिश करो ... यह आपके इतिहास फ़ाइल में सभी कमांड के लिए काम करता है ... एक ही बात है Ctrl+ R, लेकिन मुझे लगता है कि यह अधिक सहज है :)

  1. संपादित करें /etc/inputrc

    sudo vim /etc/inputrc
  2. इस दो लाइन को असंगत या जोड़ना

    "\e[5~": history-search-backward
    
    "\e[6~": history-search-forward
  3. लॉगआउट / लॉगिन


तो इतिहास में सूचीबद्ध कुछ कमांड लिखने का प्रयास करें ...

पसंद...

ls -lah

लिखना

ls

और दबाएँ

Page Upया Page Dn"ls" से शुरू होने वाले आदेशों की तलाश में अपनी इतिहास फ़ाइल को नेविगेट करने के लिए

यदि आपने सब कुछ सही किया है तो यह आपकी आज्ञा को पूरा करना चाहिए ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.