टर्मिनल में अंतिम आदेश की प्रतिलिपि बनाएँ


22

मैं up arrowनिम्नलिखित उदाहरण में टर्मिनल में अंतिम कमांड देख सकता हूं :

मैंने टाइप किया cd /:

Makss-Mac:~ maks$ cd /

... दबाया गया enter, कमांड cd /निष्पादित किया गया और अब मैं फिर से up arrowकमांड दबाकर देख सकता हूं cd /:

Makss-Mac:/ maks$ cd /

मैं न केवल अंतिम कमांड देखना चाहता हूं, बल्कि इसे क्लिपबोर्ड पर कॉपी करना चाहता हूं।

शायद शॉर्टकट मौजूद है जो न केवल टर्मिनल में अंतिम कमांड दिखाते हैं (जैसा कि up arrowकरते हैं), लेकिन एक ही समय में इसे क्लिपबोर्ड पर कॉपी करें।

या शायद वर्तमान टर्मिनल लाइन से सभी का चयन करने के लिए शॉर्टकट है। और इसलिए मैं अंतिम कमांड (दबाए जाने के बाद up arrow) को दबाकर कॉपी कर सकूंगा super+c। बेशक मैं इसे माउस द्वारा चुन सकता हूं। लेकिन जब आदेश 10 गुना लंबे समय तक हो तो cd /यह बहुत अधिक समय लेने वाला हो सकता है, खासकर यदि आप इसे हर 30 सेकंड में करते हैं।

या हो सकता है कि टर्मिनल के लिए प्लगइन लिखने का तरीका हो


यदि आप बाद में क्लिपबोर्ड की सामग्री के साथ क्या करना चाहते हैं, इसके बारे में कुछ विवरण जोड़ सकते हैं, तो यहां समाधान खोजना आसान हो सकता है। आप इसे कहाँ चिपकाने जा रहे हैं?
nohillside

इसे दूसरे टर्मिनल टैब में पेस्ट करने के लिए
मैक्सिम येफ्रेमोव

जवाबों:


17

इसे अपने ~/.bashrc ~/.bash_profileया जहां-तहां पसंद करें

alias copyLastCmd='fc -ln -1 | awk '{$1=$1}1' | pbcopy '

एक नई विंडो खोलने (या चलाने source ~/.bash_profile) के बाद आपको चलाने में सक्षम होना चाहिए copyLastCmdऔर क्लिपबोर्ड में कमांड होना चाहिए ।

यह समझाने के लिए कि आप क्या कर रहे हैं: आप मूल रूप से "फिक्स कमांड" ( fc) का उपयोग कर रहे हैं ताकि आप अंतिम कमांड प्राप्त कर सकें, इसके लिए अच्छे स्वरूपण के लिए अग्रणी और अनुगामी दोनों व्हाट्सएप को हटा दें awkऔर फिर इसे अपने मैक के पेस्टबोर्ड में कॉपी करें pbcopy

संपादित करें:

अब जब हम जानते हैं कि आप किसी अन्य टर्मिनल टैब में पेस्ट करना चाहते हैं, तो एक और विकल्प है: इन पंक्तियों को अपने ~/.bashrc ~/.bash_profileया जहाँ-कभी पसंद करें:

shopt -s histappend
PROMPT_COMMAND='$PROMPT_COMMAND; history -a; history -n'

फिर, एक बार आपके पास कुछ नए टैब खुले (चलो उन्हें "टैब ए" और "टैब बी" कहते हैं):

  1. टैब ए में किसी भी कमांड को निष्पादित करें
  2. टैब बी पर स्विच करें, एक खाली लाइन पर एंटर दबाएं , जिससे आपको "नई" नई लाइन मिलती है (और इस तरह से इतिहास का पुनर्मूल्यांकन होता है)
  3. एक बार ऊपर तीर का उपयोग करें और आपके पास वह कमांड होनी चाहिए जिसे आपने टैब ए में दर्ज किया है।

एडिट 2: मैंने उपरोक्त मूल उत्तर के sedसाथ के उपयोग को बदल दिया awkहै, जिससे दोनों प्रमुख और अनुगामी व्हाट्सएप का ध्यान रखा जा सके।


यह एक महान उर्फ ​​है! अनुगामी नई लाइन को काटने के लिए, ताकि आप चिपकाने के बाद कमांड को संपादित कर सकें, मैंने इस्तेमाल किया awk:alias copyLastCmd='fc -ln -1 | sed '1s/^[[:space:]]*//' | awk 1 ORS="" | pbcopy '
nwinkler

@nwinkler: ओह, तुम सही हो, जाग का उपयोग करना चाहिए: fc -ln -1 | awk '{$1=$1}1'दोनों अनुगामी और अग्रणी व्हाट्सएप को हटा देगा।
अस्मस

1
विशेष वर्णों के लिए उपनाम को संशोधित करना पड़ा alias copyLastCmd="fc -ln -1 | awk '{\$1=\$1}1' | pbcopy"। अभी भी मेरा उत्थान होता है
माइक डी

1
मैंने इसका उपयोग तब तक किया जब तक कि मैंने एक टर्मिनल पर "गिट -सेट -हार्ड" नहीं किया और दूसरे "अनसपिटिंग गिट फ़ोल्डर" में तीर दबाया और जल्दबाजी में प्रवेश किया क्योंकि मुझे लगा कि मैं एक स्क्रिप्ट चला रहा हूं जो मैं पहले इस्तेमाल कर रहा था। आप सोच सकते हैं कि क्या हुआ था, और पिछली बार जब मैंने इस साझा "वैश्विक" इतिहास का उपयोग किया था
MrGigu

@ मृग्यू मेरे साथ एक "स्थानीय" इतिहास के साथ हुआ, जहां मैंने एक बार के बजाय दो बार "ऊपर" तीर दबाया, गलती से - सबक कठिन तरीके से सीखा, मुझे लगता है।
असमस

5

यहाँ @Asmus द्वारा उत्तर के आधार पर एक और लिया गया है। मेरी बैश स्क्रिप्ट में उनके उपनाम को काम करने के लिए, मुझे कुछ उद्धरणों का उपयोग करना पड़ा, क्योंकि कुछ उद्धरणों के बिना एकल-उद्धृत उपनाम में कोई उद्धरण काम नहीं करता है:

alias copyLastCmd='fc -ln -1 | awk '\''{$1=$1}1'\'' | pbcopy'

'\''मूल रूप से वर्तमान बोली बंद हो जाएगा, तो एक भाग निकले बोली जोड़ें और फिर वास्तविक उद्धरण फिर से खोलें।

उपरोक्त संस्करण आपके क्लिपबोर्ड पर अंतिम कमांड को कॉपी करेगा, और एक बार जब आप इसे पेस्ट करते हैं, तो इसे तुरंत निष्पादित किया जाता है, क्योंकि इसके अंत में एक नई रेखा होगी ।

अंत में न्यूलाइन से छुटकारा पाने के लिए, ताकि आप इसे चलाने से पहले वास्तव में कमांड को संपादित कर सकें, आप निम्न कार्य कर सकते हैं:

alias copyLastCmd='fc -ln -1 | awk '\''{$1=$1}1'\'' ORS='\'''\'' | pbcopy'

ORS=''(कि बिना के हवाले से) अनुगामी न्यू लाइन चरित्र बंद पट्टी होगा, ताकि आप चलाने से पहले चिपकाया पाठ को संपादित कर सकते हैं।


5

यह अंतिम कमांड को हथियाने और इसे प्रतिध्वनित करने के लिए इतिहास विस्तार का उपयोग करेगा । आप pbcopyअपने क्लिपबोर्ड पर अंतिम कमांड को बचाने के लिए पाइप कर सकते हैं ।

> echo !! | pbcopy

यदि आप अपने इतिहास से एक कमांड चाहते हैं जो अंतिम नहीं था , तो आप चला सकते हैं:

> history

और इच्छित कमांड संख्या का संदर्भ दें जैसे:

> echo !5 | pbcopy

यह आपका पसंदीदा हो सकता है, और यह काम भी कर सकता है, लेकिन आपको इस बारे में थोड़ी खोज करने की जरूरत है कि कमांड वास्तव में क्या करता है , और कैसे ओपी (जिसने पांच साल पहले जवाब में से एक को स्वीकार किया) उसे प्रभावी ढंग से उपयोग कर सकते हैं।
IconDaemon 15

@IconDaemon अच्छी कॉल। मुझे लगता है कि यह एक पुराने प्रश्न को जोड़ने के लायक है क्योंकि यह स्वीकृत उत्तर की तुलना में सरल है क्योंकि इसे किसी भी प्रोफ़ाइल अनुकूलन की आवश्यकता नहीं है।
सैम बेरी

4

मैं सैम बेरी के समान उत्तर के साथ आया था, लेकिन यह मेरे लिए काम नहीं करता है (OSX 10.14.6)।

प्रबंधित करने के लिए ऐसा करने के लिए प्रबंधित करने के लिए उद्धरण के साथ ऐसा करने के लिए !!:

echo "!!" | pbcopy


3

आप अपने इतिहास को उन आदेशों की अनदेखी करने के लिए सेट कर सकते हैं जो एक स्थान से शुरू होते हैं:

export HISTIGNORE=' *'

और फिर अंतिम कमांड को क्लिपबोर्ड पर लाने के लिए निम्न कमांड चलाएं (सुनिश्चित करें कि आपके पास शुरुआत में एक स्थान है):

history 1 | cut -d " " -f 4- | pbcopy

आप शायद कमांड को एक उपनाम के रूप में सहेजना चाहते हैं ताकि यह याद रखना आसान हो सके।

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