मैं कैसे बैश कमांड लाइन को कुशलतापूर्वक चला सकता हूं?


19

इसलिए मैं उपयोग करता हूं ऊपर मेरे खोल में (OSX या Ubuntu पर बैश, ज्यादातर) लेकिन कुछ समय मुझे पता है कि मुझे सामान चाहिए बाद कर्सर का वर्तमान स्थान। मैं जिस लाइन पर हूं, उसका कोई तरीका है पूर्ण ऊपर की रेखा के साथ? साधते ऊपर और फिर बाएं कष्टप्रद है।

सिवाय इसके कि कोई और तरकीब भी ठंडी होती टैब , जिसके बारे में हम सभी अब :)

यहाँ एक उदाहरण है (प्रति ~ नीम हकीम का अनुरोध):

मैं अंकित करता हुँ mkdir /where/the/hell/is/that/thing और फिर मैं उसी निर्देशिका में सीडी करना चाहता हूं। लेकिन अब मुझे मेटा-बी के बारे में पता है :)


1
एक स्पष्ट उदाहरण कमाल होगा।
quack quixote

@ ~ अब उदाहरण के लिए कार्य करें
Dan Rosenstark

1
यहाँ एक बहुत अच्छा जवाब के साथ एक संबंधित (डुप्लिकेट) सवाल है: superuser.com/questions/124336/...
cregox

जवाबों:


11

इसे इस्तेमाल करे:

mkdir /where/the/hell/is/that/thing

फिर दबायें alt +

आपके OS और टर्मिनल के आधार पर आपको टाइप करना पड़ सकता है Esc फिर

आप भी दबा सकते हैं alt + 1 + एक विशिष्ट पूर्व तर्क लेने के लिए।

इससे बहुत बेहतर है !! या! $ क्योंकि आप वास्तव में देख सकते हैं कि आप क्या चलाने वाले हैं, और यह वैसे भी कम कीस्ट्रोक्स लेता है।

संपादित करें: सख्ती से बोल रहा हूँ मेटा नहीं alt , इसलिए यह "कीबोर्ड" कुंजी के साथ भी काम कर सकता है, यह इस बात पर निर्भर करता है कि आपका कीबोर्ड सेटअप कैसे है ..


दिलचस्प! उस एक के बारे में पता नहीं था।
quack quixote

2
@ अन्याय यह कमाल है। OSX मेटा पर बच रहा है।
Dan Rosenstark

ओएस एक्स टर्मिनल के साथ @यर 'सेटिंग्स' के तहत एक वरीयता सेटिंग भी है - & gt; 'कीबोर्ड' से 'विकल्प के रूप में मेटा कुंजी' का उपयोग करें।
ThomasW

धन्यवाद @ThomasW मुझे इस सामान पर वापस जाना होगा। मैं रोज कमांड लाइन पर हूं, लेकिन बहुत कम तरकीबें इस्तेमाल करता हूं।
Dan Rosenstark

26

के माध्यम से पढ़ना चाहिए आदमी को मारना आपके सिस्टम पर, विशेष रूप से अनुभाग पर पढ़ने के लिए लाइन , क्योंकि यह बैश इंटरएक्टिव इनपुट मैकेनिज्म है। Bash मैनुअल gnu.org पर पर एक अच्छा खंड है कमांड लाइन का संपादन यह कुछ अंतरालों को भरने में मदद करेगा।

डिफ़ॉल्ट रूप से, आप इनका उपयोग कर सकते हैं चारों ओर घूमें कमांडलाइन पर (बस यहां कुछ सूचीबद्ध करें; पूरी सूची के लिए लिंक देखें):

  • Ctrl + लाइन की शुरुआत में ले जाता है (या होम टर्मिनल सेटिंग्स पर निर्भर करता है)
  • Ctrl + लाइन के अंत में ले जाता है (या समाप्त ...)
  • मेटा + एक "शब्द" को आगे बढ़ाता है
  • मेटा + "शब्द" को पीछे छोड़ता है

आप इनका उपयोग कर सकते हैं "मार" (उर्फ "कट") पाठ एक पंक्ति से:

  • Ctrl + कश्मीर वर्तमान कर्सर स्थिति से पंक्ति के अंत तक पाठ ("कट") को मारता है
  • Ctrl + y yanks ("पेस्टेस") कर्सर पर बफर में सबसे हाल ही में मारा गया पाठ

तो आप इन्हें जोड़ सकते हैं कि जिस कमांडलाइन को आप दोहराना चाहते हैं, उसे मार दें, फिर इसे अपने अगले कमांड के अंत में पेस्ट करें।


अब, इसे और भी मज़ेदार बनाने के लिए, आइए बैश के बारे में विचार करें इतिहास विस्तार । यह वो है !! उस अध्ययनकर्ता के उत्तर का उल्लेख है । इतिहास का विस्तार टूट जाता है इवेंट डिज़ाइनर , शब्द रचनाकार , तथा संशोधक

घटना डिज़ाइनर इस तरह दिखते हैं (फिर से, पूरी सूची के लिंक देखें):

  • ! - एक इतिहास प्रतिस्थापन शुरू होता है
  • !n - द एन-वें कुछ पूर्णांक के लिए बैश की इतिहास सूची में कमांड n (नकारात्मक के लिए भी काम करता है)
  • !! - पूर्ववर्ती आदेश; के बराबर !-1
  • !string - सबसे हालिया कमांड से शुरू तार

शब्द डिजाइनर एक घटना से कुछ भागों का चयन करते हैं। उपयोग : डिज़ाइनर से घटना को अलग करने के लिए। शब्दों को पंक्ति की शुरुआत में 0 से शुरू किया जाता है, और सिंगल स्पेस द्वारा अलग किए गए वर्तमान लाइन में डाला जाता है।

  • $ - अंतिम तर्क नामित करता है (जैसे !!:$ अंतिम आदेश का अंतिम तर्क है; को छोटा किया जा सकता है !$ )
  • n - नामित करता है एन-वें शब्द (जैसे !str:2 के साथ शुरू होने वाले सबसे हालिया कमांड का दूसरा arg है str ; !!:0 है आदेश अंतिम आदेश के)

तो, अपने उदाहरण पर अनुवर्ती करने के लिए, यदि आपका अंतिम आदेश है mkdir /some/really/long/path, बस चल रहा है !! उस कमान को फिर से चलाएंगे। लेकिन आप चाहते हैं cd इसके बजाय उस रास्ते में:

$ cd !$

अब हम कहते हैं कि आप कुछ अन्य कमांड करते हैं और फिर उसी रास्ते पर वापस जाना चाहते हैं। अगर वह आखिरी था mkdir आपके द्वारा चलाया गया कमांड, आप इसका उपयोग उस पथ को दोहराने के लिए कर सकते हैं:

$ tar czf ~/foo.tgz !mkdir:$

आप भी कर सकते हैं बाँध जो भी आपको पसंद हो, इन (और अन्य रीडलाइन कमांड); मैनुअल के खंड ,.४ देखें, Bindable रीडलाइन कमांड: gnu.org/software/bash/manual/... और खंड 8.3, इनलाइन फाइल पढ़ें: gnu.org/software/bash/manual/bashref.html#Readline-Init-File
quack quixote

धन्यवाद जो वास्तव में मदद करता है। यद्यपि "मैनुअल पढ़ें" उम्मीद की तरह था, बाइंडिंग के चारों ओर बुनियादी चलती का उल्लेख करने से मदद मिलती है। यहां तक ​​कि सिर्फ ctrl- जानने से वास्तविक बचत हो सकती है।
Dan Rosenstark

@ कोई समस्या नहीं, मैं बाद में संशोधन पकड़ा, वास्तव में :)
Dan Rosenstark

1
ध्यान भी दें bind -p या bind -P आपकी वर्तमान कीबाइंडिंग प्रिंट करेगा; जो आपके लिए परम संदर्भ है दे घुमा के का उपयोग करता है।
quack quixote

1
मुझे लगता है कि यह उत्तर बड़ा हो गया है: इतिहास विस्तार पर सामग्री बहुत अच्छी है।
Dan Rosenstark

6

यदि आप vi उपयोगकर्ता हैं तो आप टाइप करके शेल को vi मोड में रख सकते हैं set -o vi

आप टाइपिंग के बाद कमांड लाइन पर सभी प्रकार की शक्तिशाली चीजें कर सकते हैं Esc + k

मैं जिसको सबसे ज्यादा इस्तेमाल करता हूं Esc+K फिर / स्लैश के बाद टाइप किया गया कोई भी पाठ आपके कमांड लाइन के इतिहास के माध्यम से खोज करने के लिए उपयोग किया जाएगा।

जैसे Esc + k /smbclient आपके द्वारा लिखी गई अंतिम smbclient कमांड देगा। आप मानक vi कुंजियों का उपयोग करके सभी खोजों को स्क्रॉल कर सकते हैं ( j तथा k ऊपर और नीचे लेकिन मुझे लगता है कि ऊपर और नीचे तीर भी काम करेंगे)।

आगे की मदद यहाँ , उस लिंक पर कुछ इनबिल्ट बैश चीजें भी होती हैं, जो आपको ज्यादा लग सकती हैं।

चीयर्स,   स्टू।


जबकि vi मोड मेरे लिए बेकार है, क्योंकि मैंने अभी तक vi में कदम नहीं रखा है, l स्याही भयानक है। उसके लिए धन्यवाद!
Dan Rosenstark

1
Vi मोड के बिना समतुल्य ctrl-r है। इसे टाइप करें, और फिर पिछले कमांड का हिस्सा। यह टाइप किए जाने की अंतिम घटना को सामने लाएगा। अगले करने के लिए फिर से ctrl-r मारो। बेहद सुविधाजनक।
Nerdfest

3

आप उपयोग कर सकते हैं !! जो अंतिम आदेश का प्रतिनिधित्व करता है:

% test
% echo !!
> test

दिलचस्प। यकीन नहीं है कि मैं तो उस स्ट्रिंग का हेरफेर करना चाहता हूं ... क्या?
Dan Rosenstark

यह बैश की इतिहास सुविधाओं का हिस्सा है: gnu.org/software/bash/manual/... .. विशेष रूप से इतिहास विस्तार: gnu.org/software/bash/manual/bashref.html#History-Interaction ... ध्यान दें !! के लिए एक पर्याय है !-1: gnu.org/software/bash/manual/bashref.html#Event-Designators
quack quixote

2
जब आप sudo का उपयोग करना भूल जाते हैं तो यह वास्तव में उपयोगी होता है: अर्थात sudo !! - $ अधिक / आदि / sudoers / etc / sudoers: अनुमति से इनकार $ sudo !! sudo more / etc / sudoers [sudo] के लिए पासवर्ड ..: # / etc / sudoers ... ...
user9632

@wookiebreath, इसके लिए धन्यवाद, मैं इस जवाब को अभी वोट करूंगा
Dan Rosenstark

0

आपके द्वारा दिए गए उदाहरण में, पिछली कमांड के अंतिम पैरामीटर को दर्शाने के लिए $! का उपयोग करें:

mkdir / कुछ / कुछ और

cd! $

आप पिछले आदेशों के विशिष्ट मापदंडों को बाहर निकालने के लिए गिने हुए रूपों का भी उपयोग कर सकते हैं।


0

मैंने हाल ही में पाया यह रीडलाइन धोखा-पत्र है बहुत उपयोगी। बहुत सी चीजें मुझे नहीं पता थीं। मैं इस्तेमाल करता था !$ जब तक मुझे पता नहीं चला ऑल्ट + , जो अब मैं हर समय उपयोग करता हूं। :)

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