मैं बैश में पिछली कमांड से एक विशिष्ट तर्क कैसे प्राप्त कर सकता हूं?


31

बैश में, आप !*पिछले कमांड से सभी तर्क प्राप्त करने के लिए उपयोग कर सकते हैं । एक उदाहरण के रूप में, यदि आपने किया cp /some/path /some/other/pathऔर फिर किया mv !*, तो दूसरी कमांड का विस्तार किया जाएगा mv /some/path /some/other/path

क्या ऐसा कुछ है जिसका उपयोग सभी के बजाय एक कमांड से एक विशिष्ट तर्क तक पहुंचने के लिए किया जा सकता है?

जवाबों:


38

में !*, !है इतिहास विस्तार उपसर्ग, और *है शब्द डेसिग्नेटर कि साधन सभी तर्क। आप सामान्य वाक्यविन्यास को बैंग-लाइन-कोलोन-कॉलम ( !लाइन :कॉलम) के रूप में याद कर सकते हैं । कई संभावित शॉर्टकट हैं: डिफ़ॉल्ट पंक्ति पिछली पंक्ति है, डिफ़ॉल्ट स्तंभ निर्दिष्टकर्ता "सभी" है, और यदि स्तंभ विनिर्देशक गैर-संख्यात्मक है (लेकिन !3इसका अर्थ पंक्ति 3 होगा) तो आप कॉलोन छोड़ सकते हैं । आप उपयोग कर सकते हैं !:0कमान नाम का उल्लेख करने, !:1, !:2, आदि, लगातार बहस का उल्लेख करने, !:$अंतिम शब्द के लिए, !:*सभी तर्कों के लिए और भी बहुत कुछ।

यह भी देखें माइकल Mrozek द्वारा इस पोस्ट पर यूनिक्स स्टैक एक्सचेंज


1
मैंने इसे स्वयं आजमाया और यह काम नहीं किया, हालाँकि। Michale Mrozek द्वारा पोस्ट को देखने के बाद, यह उपयोग करने के लिए कहते हैं !:1, !:2। कॉलनों के साथ संस्करण का उपयोग करने के बाद, इसने काम किया।
वफ़र्स

@MrMan: उफ़, सही है, यदि आप एक नंबर के साथ कोलन को छोड़ते हैं, तो संख्या को लाइन नंबर के रूप में व्याख्या की जाती है। उसके लिए माफ़ करना।
गिल्स 'एसओ- बुराई को रोकना'

कोई बात नहीं। तो, फिर मुझे लगता है कि कर !1:1पहली पंक्ति के पहले तर्क को इंगित करेगा?
2

4

व्यक्तिगत रूप से, मैं वास्तव में इस "विस्मयादिबोधक चिह्न के साथ विस्तार" सुविधा को नापसंद करता हूं जो echo "Hello World!"इंटरएक्टिव गोले में प्रयास करने पर भी परेशान करेगा (इसलिए लिपियों की सोर्सिंग मान लें कि वे गैर-संवादात्मक मोड में चले जाएंगे) बिल्कुल भी काम नहीं करेंगे।

इसलिए, मैंने set +o histexpandनिम्नलिखित विधि के साथ तर्कों को याद रखना शुरू किया और शुरू किया:

Esc, 1, Esc, Ctrl-Y => Insert first argument of previous command.

ध्यान दें कि Esc-trick है क्योंकि मेरे पास मेटा कुंजी नहीं है।


मैं लगभग कभी भी कमांड में विस्मयादिबोधक बिंदुओं का उपयोग नहीं करता हूं। तो विस्मयादिबोधक बिंदु विधि मेरे लिए पूरी तरह से काम करती है।
1

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

दरअसल, आपको विस्मयादिबोधक बिंदु से बचने की जरूरत नहीं है। करते हैं echo 'Hello, orld!'। डबल उद्धरण के बजाय एकल उद्धरण नोट करें।
वफ़र्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.