मेरा जवाब तीन अलग-अलग वाक्यविन्यासों में एक सरल कमांड प्रदान करता है, जो सभी समान रूप से काम करते हैं, लेकिन एक दूसरे की तुलना में थोड़ा छोटा और आसान है। तीसरी भिन्नता एक तथाकथित उपनाम है, इसका मतलब है कि आप कमांड को एक कस्टम नाम निर्दिष्ट कर सकते हैं और इसे निष्पादित करके कह सकते हैं कि जटिल सामान को याद किए बिना।
तैयारी:
सबसे पहले, पैकेज को स्थापित करें xsel
जो आपको टर्मिनल से एक्स क्लिपबोर्ड तक पहुंचने की अनुमति देता है:
sudo apt-get install xsel
कमांड भिन्नता 1 (छोटा):
उसके बाद, आप पिछले कमांड को क्लिपबोर्ड पर कॉपी करने के लिए निम्न लाइन टाइप कर सकते हैं:
xsel -ib <<<!!:q
आप दूसरे नवीनतम आदेश को कॉपी, की जगह चाहते हैं !!
के साथ !-2
तीसरे नवीनतम उपयोग के लिए, !-3
और इतने पर।
यह समझने के लिए कि आप क्या चला रहे हैं, यहाँ कमांड का संक्षिप्त विराम है:
xsel
X क्लिपबोर्ड तक पहुंचने के लिए एक कमांड-लाइन टूल है।
अधिक जानकारी के लिए, यह ऑनलाइन या पृष्ठ पर चल रहा है पढ़ें man xsel
।
-i
पैरामीटर बताता xsel
stdin से पढ़ने के लिए (आमतौर पर इस साधन कीबोर्ड इनपुट, लेकिन हम यहां रीडायरेक्ट कुछ करने जा रहे हैं)
-b
पैरामीटर निर्दिष्ट करने के बजाय क्लिपबोर्ड एक्स के "प्राथमिक" या "माध्यमिक" चयन का उपयोग करें।
<<<
एक विशेष बैश सिंटैक्स है जिसे "हियर स्ट्रिंग" कहा जाता है।
यह मूल रूप से फैलता है (मूल्यांकन नहीं करता है!) तर्क (केवल एक!) इसके बाद और इसे स्ट्रिंग के रूप में पुनर्निर्देशित करता है कमांड के स्टडिन (मानक इनपुट) से पहले / जिसके बाद यह खड़ा होता है।
!!:q
को बैश में इतिहास विस्तार के लिए "बैंग कमांड" कहा जाता है। यह स्वयं को पहले से टाइप की गई कमांड लाइन से बदल देता है।
अधिक जानकारी के लिए, इसे चलाकर स्थानीय man history
ऑनलाइन पेज पढ़ें (ऑनलाइन मैनपेज उपयोगी नहीं है)।
!!
पिछले कमांड लाइन के लिए खड़ा है और के लिए एक पर्याय है !-1
।
जाहिर है !-2
मतलब है तो दूसरी आखिरी कमांड लाइन। माइनस साइन को न भूलें -
, अन्यथा यह आपके द्वारा लिखे गए 2nd (3rd / ...) कमांड को लौटा देगा।
:q
संशोधित धमाके कमान और बैश बताता एकल उद्धरण में प्रतिस्थापन संलग्न करने ( '
) खोल से विस्तार को रोकने के लिए।
कमांड भिन्नता 2 (थोड़ी लंबी):
echo !!:q | xsel -ib
echo
टर्मिनल के स्टडआउट के लिए अपने सभी तर्कों को मुद्रित करने का सरल काम है।
!!:q
को बैश में इतिहास विस्तार के लिए "बैंग कमांड" कहा जाता है। यह स्वयं को पहले से टाइप की गई कमांड लाइन से बदल देता है।
!!
पिछले कमांड लाइन के लिए खड़ा है और के लिए एक पर्याय है !-1
। जाहिर है !-2
मतलब है तो दूसरी आखिरी कमांड लाइन। माइनस साइन को न भूलें -
, अन्यथा यह आपके द्वारा लिखे गए 2nd (3rd / ...) कमांड को लौटा देगा।
:q
संशोधित धमाके कमान और बैश बताता एकल उद्धरण में प्रतिस्थापन संलग्न करने ( '
) खोल से विस्तार को रोकने के लिए।
|
एक पाइप है। यह कमांड के टर्मिनल आउटपुट ("स्टडआउट") को उसके बाद कमांड के टर्मिनल इनपुट ("स्टडिन") पर रीडायरेक्ट करता है।
xsel
X क्लिपबोर्ड तक पहुंचने के लिए एक कमांड-लाइन टूल है।
अधिक जानकारी के लिए, यह ऑनलाइन या पृष्ठ पर चल रहा है पढ़ें man xsel
।
-i
पैरामीटर बताता xsel
stdin से पढ़ने के लिए (आमतौर पर इस साधन कीबोर्ड इनपुट, लेकिन हम यहां रीडायरेक्ट कुछ करने जा रहे हैं)
-b
पैरामीटर निर्दिष्ट करने के बजाय क्लिपबोर्ड एक्स के "प्राथमिक" या "माध्यमिक" चयन का उपयोग करें।
कमांड भिन्नता 3 (उपनाम):
यदि आप अक्सर उपयोग किए जाने वाले लंबे या जटिल आदेशों को याद नहीं करना चाहते हैं, तो एक बैश उर्फ एक ठंडी चीज है। आप इस कमांड को एक साधारण उपनाम नाम से असाइन कर सकते हैं, जिसे आप उसी को प्राप्त करने के लिए लंबे कमांड के बजाय चला सकते हैं।
दुर्भाग्य से, चूंकि बैंग कमांड एक विशेष बैश फीचर हैं और एलियास का समाधान होने से पहले विस्तारित हो जाते हैं, इसलिए आप ऊपर दिए गए विभिन्न प्रकारों में से किसी एक को उर्फ नहीं कर सकते। !!
भाग काम नहीं करेगा। हालांकि एक समाधान है।
उपनाम सेट करने के लिए, अपने टर्मिनल में निम्न पंक्ति चलाएँ। ध्यान दें कि आपने इसके बजाय किसी मान्य बैश चर नाम को चुना हो सकता है copylastcommand
:
alias copylastcommand='history -p \!\! | xsel -ib'
यह हालांकि आपके वर्तमान बैश सत्र के लिए केवल स्थायी है, जिसका अर्थ है कि टर्मिनल विंडो बंद करने के बाद उर्फ गायब हो जाएगा। यदि आप अपनी ~/.bashrc
फ़ाइल के अंत में इस लाइन को ऊपर या अपनी फ़ाइल में जोड़कर अपने प्रत्येक बैश सत्र में इसे लगातार बना सकते हैं ~/.bash_aliases
।
फिर, लाइन का एक छोटा ब्रेक:
alias name='command'
बैश में एक उपनाम सेट करने के लिए वाक्यविन्यास है। command
जब भी आप पर अमल चलाया जाएगा name
अब से।
history -p \!\!
Stdout (मानक आउटपुट) के लिए पहले निष्पादित कमांड लाइन आउटपुट। -p
स्विच के बिना , यह न केवल प्रिंट करेगा, बल्कि कमांड को फिर से चलाएगा।
ध्यान दें कि हमें बैकलिश ( !
) के साथ बैंग्स ( ) से बचने की जरूरत है \
, क्योंकि अन्यथा हम उन्हें उर्फ सेट करने की कोशिश करते हैं, जो कि उर्फ को सेट करने की कोशिश करते हैं, क्योंकि उन्हें कोई मतलब नहीं है कि वे उर्फ में होने की जरूरत है।
फिर, आप [n] -th हाल की कमांड को दूसरे बैंग के साथ बदलकर निर्दिष्ट कर सकते हैं -n
, जैसे \!-2
।
|
एक पाइप है। यह कमांड के मानक आउटपुट ("स्टडआउट") को उसके बाद कमांड के टर्मिनल मानक ("स्टडिन") पर पुनर्निर्देशित करता है।
xsel
X क्लिपबोर्ड तक पहुंचने के लिए एक कमांड-लाइन टूल है।
अधिक जानकारी के लिए, यह ऑनलाइन या पृष्ठ पर चल रहा है पढ़ें man xsel
।
-i
पैरामीटर बताता xsel
stdin से पढ़ने के लिए (आमतौर पर इस साधन कीबोर्ड इनपुट, लेकिन हम यहां रीडायरेक्ट कुछ करने जा रहे हैं)
-b
पैरामीटर निर्दिष्ट करने के बजाय क्लिपबोर्ड एक्स के "प्राथमिक" या "माध्यमिक" चयन का उपयोग करें।
<<<"!!" xsel -ib