मैं सीधे अपने क्लिपबोर्ड में एक कमांड के आउटपुट को कैसे कॉपी कर सकता हूं?


527

मैं अपने क्लिपबोर्ड में एक कमांड के आउटपुट को कैसे पाइप कर सकता हूं और टर्मिनल का उपयोग करते समय इसे वापस पेस्ट कर सकता हूं? उदाहरण के लिए:

cat file | clipboard



मैंने सिर्फ एक संबंधित प्रश्न पूछा क्योंकि जब मैं उबंटू से गित बश में विंडोज पर लॉग इन करते हुए काम नहीं कर सकता हूं: stackoverflow.com/q/60117294/470749
रायन

1
क्लिप बोर्ड पर फ़ाइल सामग्री सहेजें। apt install xclipऔरcat file | xclip -sel clip
EsmaeelE

जवाबों:


596

मैं हमेशा ऐसा करना चाहता था और इसे करने का एक अच्छा और आसान तरीका मिला। मैंने पूरी प्रक्रिया को सिर्फ इसलिए लिखा है जब किसी और को इसकी आवश्यकता हो।

सबसे पहले एक 16 kB प्रोग्राम स्थापित करें xclip:

sudo apt-get install xclip

तब आप आउटपुट को xclipक्लिपबोर्ड में कॉपी करने के लिए पाइप कर सकते हैं :

cat file | xclip

आपके द्वारा कॉपी किए गए पाठ को पेस्ट करने के लिए, आप उपयोग करेंगे:

xclip -o

जीवन को सरल बनाने के लिए, आप अपने .bashrc फ़ाइल में एक उपनाम सेट कर सकते हैं जैसा मैंने किया था:

alias "c=xclip"
alias "v=xclip -o"

यह कैसे उपयोगी है देखने के लिए, कल्पना मैं एक नया टर्मिनल विंडो में मेरे वर्तमान पथ खोलना चाहते हैं (वहाँ की तरह यह कर के अन्य तरीकों हो सकता है Ctrl+ Tकुछ सिस्टम पर है, लेकिन यह सिर्फ समझाने के उद्देश्य से है):

Terminal 1:
pwd | c

Terminal 2:
cd `v`

` ` चारों ओर ध्यान दें v। यह vपहले एक कमांड के रूप में निष्पादित होता है और फिर इसे cdउपयोग करने के लिए इन-प्लेस पर प्रतिस्थापित करता है ।

केवल Xक्लिपबोर्ड पर सामग्री की प्रतिलिपि बनाएँ

cat file | xclip

यदि आप किसी Xएप्लिकेशन के अलावा कहीं और पेस्ट करना चाहते हैं , तो यह प्रयास करें:

cat file | xclip -selection clipboard

143
"कैट फाइल | xclip" केवल सामग्री को 'X' क्लिपबोर्ड पर कॉपी करें, यदि आप 'X' एप्लीकेशन के अलावा कहीं और पेस्ट करना चाहते हैं, तो यह एक कोशिश करें: "कैट फाइल | xclip -selection क्लिपबोर्ड"
khotyn

5
आपकी पसंद का चयन उचित है!
मैट जॉइनर

4
यदि आप न्यूलाइन वर्ण को हटाना चाहते हैं ताकि आप "pwd | c" के परिणाम को सीधे पेस्ट और संपादित कर सकें, तो आप "pwd | tr -d '\ n' | xclip -selection c" कर सकते हैं
Anake

12
यह भी परिभाषित करें alias "cs=xclip -selection clipboard"और alias "vs=xclip -o -selection clipboard"सिस्टम क्लिपबोर्ड से नकल / चिपकाने को आसान बनाने के लिए
Yibo यांग

1
एक समाधान के बारे में क्या है जहां मेरे पास sudo पहुंच नहीं है, और xclip स्थापित नहीं है ??
DanGordon

178

ओएस एक्स पर, उपयोग करें pbcopy; pbpasteविपरीत दिशा में जाता है।


13
Yups! पूर्व के लिए इस तरह से:pbcopy < .ssh/id_rsa.pub
डबलजोश

कमांड आउटपुट के लिए काम नहीं करता है - जैसेpbcopy < git merge-base master some-branch
बेन

यदि आप tmux का उपयोग कर रहे हैं, तो यह तब तक काम नहीं करेगा जब तक आप अपने सत्र को पुन: जारी नहीं करते हैं: superuser.com/a/413233/146254
Atav32

1
आप बिल्ली का उपयोग भी कर सकते हैं, यदि आप पहले से ही इसके साथ काम करते हैं: बिल्ली file.txt | pbcopy
rtrigoso

3
मुझे पता है कि टिप्पणी 5 साल पुरानी है, लेकिन अगर कोई भविष्य में इस पर ठोकर खाता है, तो कमांड आउटपुट के साथ उपयोग करने के लिए,git merge-base master some-branch | pbcopy
सैम

62

मैंने Linux / OSX / Cygwin के लिए एक उपकरण बनाया है जो इन अन्यों के समान है लेकिन थोड़ा अनोखा है। मैं इसे फोन करता हूं cbऔर यह इस गिथब गैस्ट में पाया जा सकता है

उस जिस्ट में मैं दिखाता हूं कि लिनक्स, मैकओएस और साइगविन का उपयोग करके कमांडलाइन के माध्यम से कॉपी और पेस्ट कैसे किया जाता है।

लिनक्स

_copy(){
    cat | xclip -selection clipboard
}

_paste(){
    xclip -selection clipboard -o
}

मैक ओ एस

_copy(){
    cat | pbcopy
}

_paste(){
    pbpaste
}

Cygwin

_copy(){
    cat > /dev/clipboard
}

_paste(){
    cat /dev/clipboard
}

नोट: मैं मूल रूप से बॉब Enohp के जवाब में अपनी टिप्पणी में इसका उल्लेख करना चाहता हूं । लेकिन तब मुझे महसूस हुआ कि मुझे अपने गेस में एक README जोड़ना चाहिए। चूंकि जिस्ट संपादक एक मार्कडाउन पूर्वावलोकन की पेशकश नहीं करता है, इसलिए मैंने उत्तर बॉक्स का उपयोग यहां किया था और कॉपी करने के बाद / इसे अपने जीआईएसटी पेस्ट करने के बाद सोचा, "मैं भी जवाब प्रस्तुत कर सकता हूं।"

सीबी

क्लिपबोर्ड पर लीक-प्रूफ टी

इस स्क्रिप्ट को बाद में teeदेखा गया है (देखें man tee)।

यह आपकी सामान्य कॉपी और पेस्ट कमांड की तरह है, लेकिन जब आप इसे चेनेबल बनाना चाहते हैं तो एकीकृत और समझ में आता है

उदाहरण

प्रतिलिपि

$ date | cb
# clipboard contains: Tue Jan 24 23:00:00 EST 2017

पेस्ट करें

# clipboard retained from the previous block
$ cb
Tue Jan 24 23:00:00 EST 2017
$ cb | cat
Tue Jan 24 23:00:00 EST 2017
$ cb > foo
$ cat foo
Tue Jan 24 23:00:00 EST 2017

चेनिंग

$ date | cb | tee updates.log
Tue Jan 24 23:11:11 EST 2017
$ cat updates.log
Tue Jan 24 23:11:11 EST 2017
# clipboard contains: Tue Jan 24 23:11:11 EST 2017

फ़ाइल रीडायरेक्ट के माध्यम से कॉपी करें

(कालानुक्रमिक रूप से यह अंत में इसे प्रदर्शित करने के लिए समझ में आया)

# clipboard retained from the previous block
$ cb < foo
$ cb
Tue Jan 24 23:00:00 EST 2017
# note the minutes and seconds changed from 11 back to 00

इसने macOS पर टर्मिनल में क्लिपबोर्ड पर कमांड आउटपुट कॉपी करने के लिए मेरे लिए एकदम सही काम किया, धन्यवाद!
जोशुआ डाइक

46

मैंने यह छोटी सी स्क्रिप्ट लिखी थी जो कॉपी / पेस्ट कमांड से अनुमान लगाने का काम करती है।

स्क्रिप्ट का लिनक्स संस्करण आपके सिस्टम में पहले से इंस्टॉल किए जा रहे एक्लिप्स पर निर्भर करता है। स्क्रिप्ट को क्लिपबोर्ड कहा जाता है।

#!/bin/bash
# Linux version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard     # Pipe someapp's output into clipboard
#        clipboard | someapp     # Pipe clipboard's content into someapp
#

if command -v xclip 1>/dev/null; then
    if [[ -p /dev/stdin ]] ; then
        # stdin is a pipe
        # stdin -> clipboard
        xclip -i -selection clipboard
    else
        # stdin is not a pipe
        # clipboard -> stdout
        xclip -o -selection clipboard
    fi
else
    echo "Remember to install xclip"
fi

स्क्रिप्ट का OS X संस्करण pbcopy और pbpaste पर निर्भर करता है जो सभी Mac पर पूर्वस्थापित हैं।

#!/bin/bash
# OS X version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard     # Pipe someapp's output into clipboard
#        clipboard | someapp     # Pipe clipboard's content into someapp
#

if [[ -p /dev/stdin ]] ; then
    # stdin is a pipe
    # stdin -> clipboard
    pbcopy
else
    # stdin is not a pipe
    # clipboard -> stdout
    pbpaste
fi

स्क्रिप्ट का उपयोग करना बहुत सरल है क्योंकि आप बस clipboardइन दो उदाहरणों में दिखाए गए अनुसार पाइप को अंदर या बाहर करते हैं।

$ cat file | clipboard

$ clipboard | less

3
मैं नामों का उपयोग करता हूं pbcopyऔर pbpasteलिनक्स पर इसलिए यह लिनक्स और ओएस एक्स दोनों के लिए काम करता है।
स्टैक्डक्रॉक्ड

पर * सहेजें यह: ubuntu में विश्व स्तर पर स्क्रिप्ट काम करने के लिए ~/.scripts/clipboard * यह निष्पादन योग्य बनाने chmod +x ~/.scripts/clipboard * ऐड: बैश के लिए export PATH=$PATH:~/.scriptsके अंत तक ~/.bashrc मछली के लिए: * ऐड set PATH ~/.scripts $PATHकरने के लिए ~/.config/fish/fish.config फ़ाइल या फ़ोल्डर का किसी भी पहले से ही सिर्फ उन्हें बनाने के मौजूद नहीं हैं तो।
हॉकी

2
आप भी इस स्क्रिप्ट एक समारोह के रूप में लपेट कर सकते हैं clipboard(){ ... }और यह .bashrc में पेस्ट
सेबस्टियन नोवाक

यह मेरे द्वारा किए गए के समान है, लेकिन मैं इस तरह से पीछा करने की अनुमति देता हूं date | cb | tee -a updates.log। यह dateकमांड आउटपुट को क्लिपबोर्ड पर भेजता है और इसे tee -aकमांड के पास भेजता है जो इसे एक फाइल में जोड़ देता है और इसे पास करता है stdout। लेकिन यह " क्लिपबोर्ड पर लीक-प्रूफ टी " जैसा है क्योंकि अगर आप बस करते date | cbहैं तो आपको कोई आउटपुट नहीं मिलता है। और अंत में यह cb > file.txt gist.github.com/RichardBronosky/…
Bruno Bronosky

एक सुझाव - पेस्ट करने पर कमांड को निष्पादित करने से बचने के लिए अनुगामी न्यूलाइन कैरेक्टर को स्ट्रिप करें (जैसे अगर कॉपी-पेस्ट एक पथ)। मैं उस आदेश xclip -i -selection clipboardको संशोधित करकेxargs echo -n | xclip -i -selection clipboard
Ivaylo Strandjev

23

इसे अपने में जोड़ें ~/.bashrc:

# Now `cclip' copies and `clipp' pastes'
alias cclip='xclip -selection clipboard'
alias clipp='xclip -selection clipboard -o'

अब क्लिप पी पेस्ट और सी क्लिप कॉपी - लेकिन आप भी कर सकते हैं fancier सामान:

clipp | sed 's/^/    /' | cclip

↑ आपके क्लिपबोर्ड को इंडेंट करता है; ढेर अतिप्रवाह के { }बटन के बिना साइटों के लिए अच्छा है

आप इसे चलाकर इसे जोड़ सकते हैं:

printf "\nalias clipp=\'xclip -selection c -o\'\n" >> ~/.bashrc
printf "\nalias cclip=\'xclip -selection c -i\'\n" >> ~/.bashrc

कृपया एक उदाहरण दें
Ulf Aslak

7

मैं अपने क्लिपबोर्ड प्रबंधक xselसे पार्सिटरी का उपयोग कर रहा हूं और अंतिम प्रतिबद्ध संदेश को कॉपी करने के gitलिए (किसी कारण से xclipकाम नहीं करता है):

$ git log -1 --pretty=%B | xsel -i -b

7

बाहरी उपकरणों का उपयोग किए बिना, यदि आप सर्वर दृश्य SSH से जुड़ रहे हैं, तो यह अपेक्षाकृत आसान कमांड है:

विंडोज 7 + कमांड प्रॉम्प्ट से:

ssh user@server cat /etc/passwd | clip

यह रिमोट फ़ाइल की सामग्री को आपके स्थानीय क्लिपबोर्ड में डाल देगा।

(कमांड को कुंजी के लिए पेजेंट चलाने की आवश्यकता होती है, या यह आपसे पासवर्ड मांगेगा।)


1
@AfshinMoazami, शीर्षक और प्रश्न ही सामान्य है, केवल यूनिक्स सिस्टम के लिए टैग संकेत देते हैं, और मेरा उत्तर मामले को कवर करता है जब आप एक विंडोज सर्वर से एक यूनिक्स सर्वर से तारीख प्राप्त करने की कोशिश करते हैं, जो भविष्य के उपयोगी पाठक हो सकते हैं।
डी। सेव।

1
अपवोटेड क्योंकि हाँ, विंडोज के प्रवेशकों के लिए उपयोगी, जिनके पास स्थानीय स्तर पर खेलने के लिए केवल पॉवर्सशेल है (हालांकि अब एलएसडब्ल्यू वास्तव में कार्यात्मक है, मैं पॉवर्सशेल से सीधे बैश में गिर सकता हूं और वहां से मेरी * निक्सी चीजें कर सकता हूं)।
शाम

इसके डॉस प्रॉम्प्ट पर काम करने के साथ-साथ विंडोज़ 10 पर git bashecho Hello World | clip

5

मैक के लिए यह कमांड लाइन का उपयोग करके क्लिपबोर्ड में पेस्ट (क्लिपबोर्ड से) कॉपी करने का एक उदाहरण है

pwdक्लिपबोर्ड पर कमांड के परिणाम को कॉपी करें

$ pwd | pbcopy

क्लिपबोर्ड में सामग्री का उपयोग करें

$ cd $(pbpaste)

3

मैंने एक छोटा सा उपकरण बनाया जो समान कार्यक्षमता प्रदान करता है, बिना xclip या xsel का उपयोग किए। stdoutको क्लिपबोर्ड पर कॉपी किया जाता है और फिर से टर्मिनल में चिपकाया जा सकता है। देख:

https://sourceforge.net/projects/commandlinecopypaste/

ध्यान दें, कि इस टूल को X-session की आवश्यकता नहीं है। क्लिपबोर्ड को बस टर्मिनल के भीतर इस्तेमाल किया जा सकता है और Ctrl+Vअन्य एक्स-विंडो में मध्य-माउस-क्लिक द्वारा चिपकाया नहीं जा सकता है ।


3

लिनक्स में xclip स्थापित के साथ:

x -selection क्लिपबोर्ड <फ़ाइल


2

पिछली पोस्टों के आधार पर, मैं निम्नलिखित लाइट-वेट उर्फ ​​समाधान के साथ समाप्त हुआ, जिसे इसमें जोड़ा जा सकता है .bashrc:

if [ -n "$(type -P xclip)" ]
then
  alias xclip='xclip -selection clipboard'
  alias clipboard='if [ -p /dev/stdin ]; then xclip -in; fi; xclip -out'
fi

उदाहरण:

# Copy
$ date | clipboard
Sat Dec 29 14:12:57 PST 2018

# Paste
$ date
Sat Dec 29 14:12:57 PST 2018

# Chain
$ date | clipboard | wc
   1       6      29

1

मैं एक छीन नीचे केडीई पृष्ठभूमि से आते हैं और करने के लिए पहुँच नहीं है xclip, xselया अन्य फैंसी सामान। मेरे पास मामलों को बदतर बनाने के लिए एक TCSH Konsole है।

आवश्यक वस्तुएँ: qdbus klipper xargs bash

एक बैश निष्पादन योग्य बनाएँ foo.sh

#!/bin/bash
qdbus org.kde.klipper /klipper setClipboardContents "$1" > /dev/null

ध्यान दें: यह bash होने की जरूरत है क्योंकि TCSH मल्टी-लाइन तर्कों का समर्थन नहीं करता है।

एक TCSH उर्फ ​​द्वारा पीछा किया .cshrc

alias clipboard xargs -0 /path/to/foo

स्पष्टीकरण:

xargs -0पाइप एक ही तर्क में अटक जाते हैं। इस तर्क को bash निष्पादन योग्य के लिए दिया जाता है जो "क्लिपबोर्ड पर प्रतिलिपि" का klipperउपयोग करने के लिए अनुरोध भेजता है qdbus। करने के लिए पाइप /dev/nullन्यू लाइन चरित्र द्वारा दिया मुद्रित नहीं है qdbusकंसोल के लिए।

उदाहरण उपयोग:

ls | clipboard

यह वर्तमान फ़ोल्डर की सामग्री को क्लिपबोर्ड में कॉपी करता है।

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


1

मैं आमतौर पर इस कमांड को चलाता हूं जब मुझे अपनी कॉपी करनी होती है ssh-key:

cat ~/.ssh/id_rsa.pub | pbcopy

ctrl+v कहीं और।



0

अपने विंडोज़ सिस्टम पर इंस्टॉल किए गए बैश का उपयोग करने वालों के लिए (लिनक्स (डब्लूएसएल) के लिए विंडोज सबसिस्टम के रूप में जाना जाता है), प्रयास करके एक्लिप्स एक त्रुटि देगा:

Error: Can't open display: (null)

इसके बजाय, याद रखें कि लिनक्स सबसिस्टम का उपयोग विंडोज़ के निष्पादन योग्य तक है। यह क्लिप की तरह उपयोग करना संभव है

echo hello | clip.exe

जो आपको पेस्ट कमांड (ctrl-v) का उपयोग करने की अनुमति देता है।


1
ध्यान दें कि अगर खिड़कियों पर एक xserver (जैसे vcxsvr या xming) स्थापित है, तो एक डिस्प्ले ऊपर है और xclipboard चल रहा है, आप वास्तव में xclip का उपयोग कर सकते हैं।
बिटबाइट

0

बस एक किनारे मामले को कवर करने के लिए :) और क्योंकि सवाल शीर्षक पूछता है (कम से कम अब) कैसे एक कमांड के आउटपुट को सीधे क्लिपबोर्ड पर कॉपी किया जाए।

पहले से ही कई बार मुझे कमांड के आउटपुट को कॉपी करने के लिए उपयोगी लगता है क्योंकि इसे पहले ही निष्पादित किया गया था और मैं फिर से कमांड निष्पादित नहीं करना चाहता या नहीं कर सकता।

इस परिदृश्य के लिए, हम या तो gdm या समान माउस उपयोगिता का उपयोग कर सकते हैं और माउस का उपयोग कर सकते हैं। apt-get install gdmऔर फिर या तो राइट क्लिक करें या टर्मिनल में कॉपी और पेस्ट के लिए Cntrl + Shift + c और Cntrl + Shift + v संयोजन

या, जो मेरे लिए पसंदीदा तरीका है (चूंकि माउस एक फलक के अंदर ठीक से चयन नहीं कर सकता है जब आपके पास एक से अधिक पैन हैं और आपको एक से अधिक लाइन चुनने की आवश्यकता है), tmux का उपयोग करके हम मानक का उपयोग करके tmux बफर में कॉपी कर सकते हैं [, स्थान, चयन करने के लिए कदम, दर्ज करें या आप कोड के एक ब्लॉक का चयन कर सकते हैं। यह भी विशेष रूप से तब उपयोगी है जब आप tmux जैसे cli मल्टीप्लेक्सर की गलियों में से एक के अंदर हों और आपको पाठ का एक गुच्छा चुनने की आवश्यकता हो, लेकिन पंक्ति संख्याएँ नहीं (मेरा vim सेटअप रेंडर लाइन संख्याएँ)

इसके बाद आप कमांड का उपयोग कर सकते हैं:

tmux save- बफर - | xclip- आई

आप निश्चित रूप से इसे पसंद करते हैं या tmux कॉन्फ़िगरेशन फ़ाइल में सीधे बाँध सकते हैं

यह केवल आपको इस किनारे के मामले को कवर करने के लिए एक वैचारिक जवाब देने के लिए है जब आदेश को फिर से निष्पादित करना संभव नहीं है। यदि आपको अधिक विशिष्ट कोड उदाहरणों की आवश्यकता है, तो मुझे बताएं

चियर्स

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