इतिहास में अंतिम कमांड से दूसरे तर्क का उपयोग कैसे करें?


11

मैं कुछ रेगेक्स सीखना शुरू कर रहा हूं, इसलिए मैं इस कमांड का बार-बार उपयोग करता हूं:

grep pattern /usr/share/dict/american-english 

केवल पैटर्न वाला हिस्सा बदलता है, इसलिए मुझे बार-बार लंबी अभिव्यक्ति " / usr / शेयर / तानाशाही / अमेरिकी-अंग्रेजी " लिखना होगा ।

किसी ने टिप्पणी की कि कमांड इतिहास से कमांड के एक तर्क को पूर्ण अभिव्यक्ति के बजाय क्रिप्टिक चरित्र संयोजन टाइप करके विस्तारित करना संभव है। क्या आप मुझे उन गूढ़ चरित्र संयोजनों के बारे में बता सकते हैं?


क्या यह दूसरे तर्क या अंतिम तर्क के बारे में है?
mikeserv

इस मामले में अंतिम तर्क दूसरा होने के लिए होता है, मैंने यह अंतर स्पष्ट नहीं किया।
अब्दुल अल हज़्रेड

उस मामले में, bash, dash, zsh, mksh, और kshगोले (कम से कम, कि मैं के बारे में पता) सभी पहचान लेंगे $_पिछले आर्ग विशेष पैरामीटर (कुछ तो हालांकि केवल इंटरैक्टिव मोड में करते हैं,) । यह सिर्फ एक चर की तरह फैलता है grep somepattern filename; grep otherpattern "$_":। आप आमतौर पर इसकी सामग्री को आउटपुट में देख सकते हैं set
mikeserv

जवाबों:


23

आप उपयोग कर सकते हैं <M-.>(या <Esc>.यदि आपकी मेटा कुंजी कुछ और के लिए उपयोग की जा रही है), अर्थात, मेटा-डॉट (या <esc> डॉट), जहां मेटा आमतौर पर Alt कुंजी है, पिछले कमांड के अंतिम तर्क को याद करने के लिए। तो, पहले आप टाइप करेंगे

$ grep foo /usr/share/dict/american-english

और फिर अगर आप किसी और चीज़ के लिए जीरो करना चाहते हैं, तो आप टाइप करेंगे

$ grep bar

एक स्थान टाइप करने के बाद और फिर Esc.(यानी, पहले एस्केप कुंजी को दबाएं, और फिर अवधि कुंजी):

$ grep bar /usr/share/dict/american-english

आप निम्न में से किसी एक का भी उपयोग कर सकते हैं:

$ grep bar !:2
$ grep bar !$

कहाँ !:2और !$मतलब "दूसरा तर्क" और "अंतिम तर्क" क्रमशः।


यह बैश और गोले के लिए है जो इमैक (डिफ़ॉल्ट) बाइंडिंग का उपयोग करके रीडलाइन का उपयोग करते हैं: editing-mode viसेट के साथ आपको Zsh के ~/.inputrcलिए बाइंडिंग के लिए एक बंधन जोड़ने की yank-last-argआवश्यकता होती है insert-last-word...
jasonwryan

@jasonwryan, अगर यह पिछले आर्ग आप चाहते हैं, तो किसी में है (सहभागी) zsh , bash, ksh, mksh, या dashगोले तुम सिर्फ उपयोग कर सकते हैं $_। संभावित रूप से वह बंधन पहले से ही सेट है, हालांकि, ESC _कब set -o viप्रभाव में है।
mikeserv

@mikeserv धन्यवाद माइक, मैं इसे संगतता के लिए पलटाव होना चाहिए ...
jasonwryan

@ajonwryan - कोई समस्या नहीं है - यह केवल शेल कीबोर्ड ट्रिक है जो मुझे पता है - मैं उन सभी त्वरित प्रकार के शॉर्टकटों को याद / कॉन्फ़िगर करने पर चूसता हूं। यदि आपको कोई आपत्ति नहीं है, तो संगतता w / क्या है? क्या आपके द्वारा उपयोग किए जाने वाले कुछ प्रोग्राम हैं जो इसे अलग तरीके से करते हैं? ओह, मैं _letterउर्फ बाइंडिंग के लिए ईएससी @लेटर को भी याद कर सकता हूं - लेकिन केवल इसलिए कि मैं अभी भी यह पता नहीं लगा सकता कि यह कैसे काम करता है w / bsd editline
मोकेसर

@ मोटरसाइकल मैं इसे इस तरह से बांधता हूं ताकि यह वही हो चाहे मैं बैश या ज़श (दोनों वि मोड में) का उपयोग कर रहा हूं या मशीन में बैश के साथ एमएसीएस मोड में (यह उन बाइंडिंग में से एक है जो मैं वास्तव में हथौड़ा करता हूं)।
jasonwryan

2

सामान्य तौर पर (बाश के साथ) <Esc> N <Esc> .पिछले कमांड से एन कमांड को वर्तमान कमांड लाइन (जहां एन 0-आधारित है) में एन 'तर्क को याद करेंगे।

अंतिम कमांड से दूसरे तर्क के लिए, यह होगा:

<Esc> 1 <Esc> .

यदि आप तीसरा तर्क चाहते थे, तो

<Esc> 2 <Esc> .

... और इसी तरह।

जैसा कि दूसरों ने उल्लेख किया है, यदि आप पिछले कमांड से अंतिम तर्क चाहते हैं , तो उसके लिए एक विशिष्ट शॉर्टकट है:

<Esc> .

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