टर्मिनल - माउस का उपयोग किए बिना CLI से प्रतिलिपि


20

सीएलआई में कमांड फायरिंग करते समय, मैं उस कमांड को कॉपी करना चाहता हूं जिसे मैंने फायर किया था या मैंने टर्मिनल में लिखा था और माउस का उपयोग किए बिना इसे कहीं और पेस्ट करना था

निम्नलिखित चित्र की तरह, मैं माउस का उपयोग किए बिना अपडेट कमांड (पूरी तरह से या आंशिक रूप से) की प्रतिलिपि बनाना चाहता हूं और इसे कहीं पेस्ट करना चाहता हूं।

माउस का उपयोग किए बिना CLI से कॉपी करें


1
आप एक माउस के बिना सूक्ति का उपयोग कर रहे हैं?
ott--

जवाबों:


11

आप उपयोग कर सकते हैं screen(1) अपनी पसंद के टर्मिनल एमुलेटर के भीतर ( xterm, gnome-terminal, ...)।

आपके लिए आवश्यक कार्यक्षमता अंतर्निहित है screen। आपको इसके काम करने के तरीके से परिचित होना चाहिए:

  • डिफ़ॉल्ट रूप से, "कमांड" कीबाइंडिंग Ctrl+ है A, आप "कमांड" अनुक्रम और विशिष्ट कार्रवाई जारी करके कमांड बनाते हैं।
  • "कॉपी" कमांड है: AltGr+[
  • "पेस्ट" कमांड AltGr+ है]

आप दूसरे टर्मिनल में कमांड और "पेस्ट" को "कॉपी" कर सकते हैं।

screen मजेदार है और एक बार जब आप इसका उपयोग करना शुरू कर देंगे तो आपको आश्चर्य होगा कि यह कैसे संभव है कि आप इसका उपयोग बिल्कुल नहीं कर रहे हैं।


कोई screenआदेश नहीं था , इसलिए मैंने इसे गनोम-टर्मिनल में स्थापित किया और screenएक टर्मिनल में शुरू किया। लेकिन उसके बाद शुरू नहीं हो सका। इसके अलावा मुझे यह समझ में नहीं आया कि आपके द्वारा निर्मित स्क्रीन का क्या मतलब है।
प्रयागपाद

1
पढ़ें man screen। इसके अलावा, मैं ने लिखा है 'में निर्मित में स्क्रीन', जिसका अर्थ है कॉपी / पेस्ट कार्यक्षमता में मौजूद है screen डिजाइन द्वारा
दाऊद

spaceवांछनीय क्षेत्र का चयन करने के लिए आपको कुंजी का उपयोग करने की आवश्यकता है । आपको Yपूरी लाइन या वांछनीय क्षेत्र की प्रतिलिपि बनाने के लिए उपयोग करने की आवश्यकता है । स्क्रीन viआंदोलनों के अनुकूल है।
फेलिकजेड

क्या AltGrकुंजी है? मेरे पास हैAlt
अलहलाल

1
screenउपकरण समारोह यहां विस्तार से बताया गया है नहीं है। और यह प्रश्न का उत्तर नहीं देता है।
लुइस डी सूसा

7

पहले से दिए गए उत्तरों के अलावा, आप अधिक लचीले टर्मिनल एमुलेटर पर जाने पर विचार कर सकते हैं।

यदि आप rxvt-unicode में टर्मिनलों को बदलने के लिए तैयार थे , तो आप urxvt-perls जैसे उपकरण का उपयोग कर सकते हैं : स्क्रिप्ट का एक संग्रह जो उस टर्मिनल एमुलेटर में निम्नलिखित कीबोर्ड कार्यक्षमता प्रदान करता है:

  • टेक्स्ट का चयन, कॉपी और पेस्ट करें
  • आगे और रिवर्स खोज
  • अपने पसंदीदा ब्राउज़र में URL हाइलाइट करें और खोलें

आप बस पैकेज को स्थापित करते हैं और फिर अपने लिए कुछ लाइनें जोड़ते हैं ~/.Xresources, और फिर आप अच्छे के लिए कृंतक को अनप्लग कर सकते हैं।


4

आप एक प्रोग्राम का उपयोग करके ऐसा कर सकते हैं xclip:

NAME
   xclip - command line interface to X selections (clip‐
   board)

एक बार जब आप इसे स्थापित कर लेते हैं, तो आप इसे अपने एक्स क्लिपबोर्ड से कनेक्ट करने के लिए उपयोग कर सकते हैं। दुर्भाग्य से, यह आपके mysqlवातावरण में काम नहीं करेगा (यह कॉपी की गई लाइनों के लिए अपना स्वयं का बफर है) लेकिन यह तब होगा जब आप एक 'सामान्य' कमांड चलाना चाहते हैं। उदाहरण के लिए :

$ This is a long command line

CtrlAलाइन की शुरुआत में जाने के लिए टाइप करें, कमांड को उद्धरणों में संलग्न करें फिर इसे प्रतिध्वनित करें:

$ echo -e "This is a long command line" |xclip 

अब आपके मध्य क्लिक क्लिपबोर्ड में "यह एक लंबी कमांड लाइन है" है।

यदि आप एक माउस का उपयोग किए बिना पेस्ट करना चाहते हैं, तो यह इस बात पर निर्भर करेगा कि आप कहां पेस्ट कर रहे हैं। आप चलाकर दूसरे टर्मिनल में पेस्ट कर सकते हैं:

$ xclip -o

आप उसी टर्मिनल में पेस्ट कर सकते हैं, बस कमांड को मारकर (काटकर) CtrlKउसके साथ पेस्ट कर सकते हैं CtrlY

आप बैश के इतिहास का उपयोग करके टर्मिनलों में कमांड भी बचा सकते हैं। इस लाइन को अपने में जोड़ें ~/.bashrc:

PROMPT_COMMAND='history -a; history -r'

PROMPT_COMMANDएक विशेष बैश वैरिएबल है। यदि यह निर्धारित किया जाता है कि मान एक नई प्रॉम्प्ट जारी करने से पहले एक कमांड के रूप में निष्पादित किया जाता है। history -aवर्तमान सत्र के इतिहास को इतिहास फ़ाइल में लिख देगा और history -rउस फ़ाइल को पुनः लोड कर देगा। इसका मतलब यह है कि आपके द्वारा चलाया जाने वाला प्रत्येक कमांड तुरंत इतिहास फ़ाइल में लिखा जाएगा।

अब जब आप एक लंबी कमांड लाइन चलाते हैं, तो आप दूसरे टर्मिनल और हिट रिटर्न पर स्विच कर सकते हैं (बस चलाने के लिए $PROMT_COMMAND, वैकल्पिक रूप से, एक नई टर्मिनल विंडो खोलें) और यह इस टर्मिनल के इतिहास के लिए सुलभ होगा। यदि आप अब हिट करते हैं तो आप Upइसे नए टर्मिनल पर चला सकते हैं।


यह ठीक है, लेकिन मुझे अभी भी माउस का उपयोग करना है?
प्रयागपाद

@PrayagUpd आह, हाँ, जो मध्य क्लिक बफर की नकल करेगा। दूसरे तरीके के लिए अद्यतन उत्तर देखें।
terdon

मुझे लगता $ xclip -oहै कि वह नहीं है जो मैं चाहता हूं क्योंकि यह सिर्फ वही प्रिंट करता है जो मैं करता हूं xclipe। लेकिन +1 Ctrl+Aद्वारा पीछा किया Ctrl+Kऔर Ctrl+Yएक ही टर्मिनल में कम से कम काटने और चिपकाने के लिए करने के लिए।
प्रयागपाद

@PrayagUpd बात यह है कि खेल में विभिन्न क्लिपबोर्ड बफ़र हैं और समाधान इस बात पर निर्भर करेगा कि आप वास्तव में क्या करना चाहते हैं। क्या आप अपने प्रश्न का एक विशिष्ट उदाहरण के साथ अद्यतन कर सकते हैं कि आपको क्या चाहिए? मेरा मतलब है कि जहाँ से (mysql मुश्किल हो जाएगा) और कहाँ से नकल।
टेराडन

1
@PrayagUpd किसी अन्य ट्रिक के लिए अद्यतन उत्तर देखें।
terdon

1

@evilsoup ने एक अच्छा समाधान सुझाया है लेकिन यह अक्सर टूट जाता है।

एक त्वरित समाधान

यहां एक ऐसा उपाय है जो कभी नहीं टूटता

history | tail -2 | head -1 | xclip -selection clipboard

बस इस कमांड को चलाएं और यह उस कमांड को कॉपी कर देगा जिसे आपने क्लिपबोर्ड पर चलाया था।

मूल रूप से, यह क्या करता है कि यह आपके कमांड इतिहास को प्रिंट करता है और दूसरी अंतिम कमांड लेता है और इसे आपके क्लिपबोर्ड को खिलाता है (अंतिम कमांड यह स्वयं है, इसलिए यह दूसरी अंतिम कमांड का चयन करता है)।

एक कस्टम फंक्शन

त्वरित समाधान पर विकास, यहां मैंने एक छोटा सा फ़ंक्शन लिखा है जो बहुत स्मार्ट है और अंतिम उपयोग किए गए कमांड को कॉपी करेगा। आप अंतिम-एनटी कमांड को कॉपी करने के लिए संख्यात्मक तर्क भी प्रदान कर सकते हैं। उदाहरण के लिए दूसरे अंतिम आदेश की नकल के लिए 2तर्क के रूप में प्रदान करते हैं

myclipcopy () {

  if [ -z $1 ]
    then  # if no argument was provided then just copy the last used command
    history | tail -2 | head -1 | sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g' | xclip -selection clipboard
    echo 'Anyways, the following command has been copied:'
    history | tail -2 | head -1| sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g'

  else
    myindex=$(( $1+1 ))
    history | tail -$myindex | head -1 | sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g' | xclip -selection clipboard
    echo "The following command has been copied:"
    history | tail -$myindex | head -1 | sed -re 's/[[:space:]]+[[:digit:]]+[[:space:]]+//g'
  fi

  #Delete this command itself from the history
  myhisnum=$(history | tail -1 | grep -oP '\s\d+\s' | grep -oP '\d+'); history -d $myhisnum
}

अपनी ~/.bashrcफ़ाइल में उपरोक्त फ़ंक्शन को कॉपी-पेस्ट करें । ध्यान दें कि यदि आप इसे एक अलग बैश स्क्रिप्ट फ़ाइल में रखते हैं, और स्क्रिप्ट को चलाते हैं, तो यह काम नहीं करेगा क्योंकि इतिहास कमांड उस मामले में आपके इतिहास तक पहुंचने में सक्षम नहीं होगा।

अंत में, इसे इस रूप में चलाएं:

myclipcopy 3
# This copies the third-last command

इसके अलावा, इस फ़ंक्शन में जोड़ा गया एक अच्छा फीचर यह है कि इसे चलाने के बाद इसे इतिहास से हटा दिया जाता है। यह तब सहायक होता है क्योंकि तब कमांड्स का "बैकवर्ड" इंडेक्स नहीं बदलता है।


यह मजबूत नहीं है
मोकेसर

@ बाइक: मैंने इसका नाम बदलकर अब "कस्टम फंक्शन" रख दिया है। लेकिन आपने इसे कम क्यों किया? क्या आप ध्यान नहीं देते हैं कि यह सवाल का ठीक से जवाब देता है? इसके अलावा, मैंने "मजबूत" क्यों कहा क्योंकि यह वास्तव में कभी नहीं टूटना चाहिए था। डाउनवोटिंग करके, आप पोस्ट से उचित उत्तर छिपा रहे हैं।
शिवाम्स

मैं नीचा दिखा रहा हूं क्योंकि आप बहुत कुछ मानते हैं : विशेष रूप से बैश और लिनक्स, जिनमें से कोई भी प्रश्न में निर्दिष्ट नहीं है। इसके अलावा, आपकी पाइपलाइन हास्यास्पद रूप से ओवरकम्प्लीकेटेड है, और आपके रेगेक्स का भी यही सच है
mikeserv

@mikeserv: टिप्पणी के लिए धन्यवाद। उम्मीद है कि इससे मुझे बेहतर उत्तर देने में मदद मिलेगी। मैं स्वीकार करूंगा कि मेरी रेग्क्स और पाइपलाइनें बदसूरत हैं। लेकिन उनका अच्छी तरह से परीक्षण किया गया है और मैं इसका उपयोग कर रहा हूं। और मान्यताओं के अनुसार, क्या आपने ध्यान दिया कि उपयोगकर्ता द्वारा उपयोग किए जा रहे अनुमान को सबसे अधिक मूल्यांकन किया गया था screen। दूसरे उच्चतम श्रेणी के उत्तर को भी मान लिया गया था bashऔर linux। इसके अलावा, मान bashलेना कोई बड़ी बात नहीं है क्योंकि स्क्रिप्ट अभी भी zsh या अधिकांश अन्य गोले में काम करेगी।
शिवाम्स

मैंने यह नहीं कहा कि यह बदसूरत था - मैंने कहा कि यह अधूरा था। और नहीं, यह अधिकांश अन्य गोले में ठीक काम नहीं करेगा । और क्या अधिक है, सवाल में CLI वास्तव में चित्रित किया गया है MySQL। हालांकि अन्य उत्तरों के बारे में अच्छी बात है।
मोकेसर

0

यह कमांड बैश के इतिहास के विस्तार का उपयोग करता है (इसलिए !!आपके द्वारा टर्मिनल में टाइप की गई अंतिम पंक्ति में विस्तार होता है)। आपको शायद xclipया तो स्थापित करना होगा या xsel

echo "!!" | xclip -selection clipboard

echo "!!" | xsel -i --clipboard

इस में अपने पिछले आदेश रखा जाएगा Ctrl+ vक्लिपबोर्ड, तो आप किसी भी जीयूआई कार्यक्रम में में पेस्ट करने के लिए सक्षम हो जाएगा (या के साथ Ctrl+ Shift+ vसबसे टर्मिनल emulators में, या के साथ "+pvim में)।

उदाहरण के लिए, डबल कोट्स वाली कुछ पंक्तियों के लिए यह टूट जाएगा:

$ echo "foo;bar"
foo;bar
$ echo "!!"
echo "echo "foo;bar""
echo foo
The program 'bar' is currently not installed. You can install it by typing:
sudo apt-get install bar

यह उस कमांड के लिए काम करेगा जिसे आपने एक उदाहरण के रूप में दिया था; यदि दोहरे कोट्स वगैरह से बच रहे हैं तो आपको केवल समस्याएं होनी चाहिए ; & && | ||


इस उत्तर के लिए धन्यवाद, यह सबसे व्यावहारिक समाधान था जिसे मैं तुरंत लागू कर सकता था। और मुझे विश्वास है के साथ "मुद्दों बिल्कुल !! हवाले से नहीं बस बचा जा सकता है, बस करो echo !!और यह दोषरहित काम करेंगे (असंभव मामले में सिवाय इसके कि अपने पिछले आदेश शुरू कर दिया साथ -nया -eया कुछ अन्य विकल्प है कि echoअपने आप में लेता है)।
सूंदर - मोनिका

0

शायद सबसे सुविधाजनक समाधान नहीं है, लेकिन मैं इसका उपयोग करता हूं और इसलिए यह दूसरों के लिए मददगार हो सकता है और इसे किसी भी अतिरिक्त नरम स्थापना की आवश्यकता नहीं है।

  1. आपको किसी भी सुविधाजनक निर्देशिका में एक अस्थायी फ़ाइल बनाने की आवश्यकता है

  2. उस फ़ाइल में आवश्यक दिशा या पाठ स्थानांतरित करें। स्थानांतरण दिशा के लिए आप उपयोग कर सकते हैं

    echo $(pwd) 1> tempo
    
  3. फ़ाइल उपयोग कमांड से दिशा प्राप्त करने के लिए

    cd $(tail -n 1 tempo)
    

आदेशों को कॉपी और पेस्ट करने के लिए यह सिस्टम या तो काम करेगा। आशा है कि सहायक था


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