2015-10-30 6 views
5

जेश और बैश जैसे शैल बैंग कमांड जो विस्मयादिबोधक चिह्न से शुरू होते हैं और उपयोगकर्ता के इतिहास में आइटम में विस्तार करते हैं।बैश में बैंग कमांड का अंतःक्रियात्मक विस्तार कैसे करें?

चलाए गए अंतिम आदेश का अंतिम तर्क प्राप्त करने के लिए, कोई !$ का उपयोग कर सकता है, उदा।

$ echo one two three 
$ echo !$ !$ !$ 
> three three three 

zsh में, यह इन धमाके का विस्तार करने के लिए संभव है सहभागी आदेश:

touch foo bar 
ls !$<TAB> 

!$foo इनलाइन करने के लिए विस्तार किया जाएगा।

यह बहुत उपयोगी है क्योंकि यह अक्सर मुझे गलतियों से रोकता है: मैं tab को विस्तारित करने के लिए दबाता हूं और सुनिश्चित करता हूं कि मुझे यह सही हो गया है और मुझे विश्वास होने पर विस्तार को पूर्ववत करने के लिए C-/ दबाएं।

क्या बैंग कमांड के इंटरैक्टिव विस्तार को प्राप्त करने के लिए बैश में एक सेटिंग है?

क्या उस बात के लिए subshells और सामान्य चर के विस्तार के बारे में (अर्थात echo $(uname)<TAB>echo Linux करने और echo $SHELL<TAB>echo /bin/bash के लिए)।

+0

आपका प्रश्न यह मानता है कि पाठक समझता है कि zsh में बैंग कमांड क्या हैं। यदि आप उस कार्यक्षमता का वर्णन करते हैं जो आप बाद में कर रहे हैं तो आप शायद व्यापक दर्शकों तक पहुंच सकते हैं। मैं एम अनुमान लगा रहा हूँ। एक उपसर्ग तर्क के साथ आप जो चाहते हैं उसके करीब है, लेकिन मैंने गुगल नहीं किया है। – tripleee

+2

http://structure.usc.edu/bash/bashref_8.html#SEC106 उपलब्ध बाइंडिंग बताता है। एम-सी-ई सामान्य विस्तार करता है जो आपके दूसरे प्रश्न में इतना कम या कम है। (भविष्य में प्रति पोस्ट केवल एक प्रश्न, कृपया!) – tripleee

+0

मैंने बैंग कमांड के साथ मेरा मतलब थोड़ा सा विस्तार किया। मुझे लगता है कि तंत्र सबहेल, चर आदि के लिए समान था। इसलिए मैंने प्रश्न के दूसरे भाग को शामिल किया। और आप सही हैं, धन्यवाद, 'खोल-विस्तार-रेखा' वास्तव में मैं जो खोज रहा था वह था। – kba

उत्तर

8

इतिहास विस्तार के लिए आप कुछ विकल्प उपयोग कर सकते हैं। एक :p संशोधक है, जो इसे निष्पादित करने के बजाए विस्तारित कमांड को प्रिंट करता है।

$ echo foo 
$ !!:p 
echo foo 

एक और histverify विकल्प है, जो परिणाम के बजाय संपादन के लिए खोल बफर में इतिहास के विस्तार के डालता तुरंत क्रियान्वित करने के उपयोग करने के लिए है।

$ shopt -s histverify 
$ echo foo 
foo 
$ !! 
$ echo foo 

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

डिफ़ॉल्ट रूप से, ReadLine आदेश history-expand-line (, Alt-^ या Esc-^ अपने टर्मिनल एमुलेटर मेटा कुंजी के रूप में भेजे जाने वाला के आधार पर) M-^ करने के लिए बाध्य है, जो वर्तमान कमांड लाइन पर किसी भी इतिहास के विस्तार का विस्तार कर रहा है।

वहाँ भी, एक सामान्य ReadLine आदेश shell-expand-line (डिफ़ॉल्ट रूप से M-C-e करने के लिए बाध्य) है, जो कमांड लाइन पर सब कुछ फैलता है सिर्फ शेल के रूप में होगा दर्ज करें लेकिन बस से पहले वास्तव में यह क्रियान्वित करने से टकराने के बाद।

+1

'खोल-विस्तार-रेखा' रीडलाइन कमांड वह था जिसे मैं ढूंढ रहा था। 'shopt -s histverify' भी बहुत उपयोगी है, धन्यवाद। जैसा कि @ ट्रिपली ने टिप्पणियों में उल्लेख किया है, अंतिम आदेश (यानी '! $') का अंतिम तर्क पाने के लिए शॉर्टकट 'एम-।' ('Alt + .' या' Esc-.') है। – kba

+1

एक 'Ctrl-x' भी लाइन को निष्पादित करता है (निष्पादन के बिना)। –

संबंधित मुद्दे