linux - बैश स्क्रिप्ट में क्लिपबोर्ड से / पाइप करें




12 Answers

आप थोड़ा अस्पष्ट हैं। मुझे आशा है कि आप शायद एक्स के अंदर एक लिनक्स उपयोगकर्ता हैं जो एक्स PRIMARY क्लिपबोर्ड में सामान रखना चाहता है।

यह समझना महत्वपूर्ण है कि bash में क्लिपबोर्ड नहीं है। "क्लिप" जैसी कोई चीज नहीं है, क्योंकि एक्स, एक्स के बाहर एक्स के अंदर, कई अन्य ओएस, विंडोज़ पर bash चल सकता है ... उल्लेख नहीं है कि एक्स के पास तीन अलग-अलग क्लिपबोर्ड हैं। क्लिपबोर्ड की एक संपत्ति है जिसके साथ आप काम कर सकते हैं। आम तौर पर जिस क्लिपबोर्ड से आप बात करना चाहते हैं वह एक उपयोगिता है जो आपको इससे बात करने देती है।

एक्स के मामले में, हाँ, xclip (और अन्य) है। xclip -selection c क्लिपबोर्ड पर डेटा भेज देगा जो अधिकांश अनुप्रयोगों में Ctrl-C, Ctrl-V के साथ काम करता है।

यदि आप मैक ओएस एक्स क्लिपबोर्ड से बात करने की कोशिश कर रहे हैं, तो pbcopy

यदि आप लिनक्स टर्मिनल मोड (कोई एक्स) में हैं तो शायद आपको gpm में देखना होगा।

जीएनयू screen भी है जिसमें एक क्लिपबोर्ड है। वहां सामान डालने के लिए, screen कमांड " readreg " देखें।

विंडोज / साइगविन के तहत, विंडोज़ के नए संस्करणों (कम से कम विंडोज 10) के लिए /dev/clipboard या clip उपयोग करें।

क्या बैश में क्लिपबोर्ड से / पाइप करना संभव है?

चाहे वह किसी डिवाइस हैंडल से या सहायक उपकरण का उपयोग कर पाइपिंग कर रहा हो, मुझे कुछ भी नहीं मिल रहा है।

उदाहरण के लिए, अगर /dev/clip क्लिपबोर्ड से लिंक करने वाला एक उपकरण था तो हम कर सकते थे:

cat /dev/clip        # Dump the contents of the clipboard
cat foo > /dev/clip  # Dump the contents of "foo" into the clipboard



इंस्टॉल करें

# You can install xclip using `apt-get`
apt-get install xclip

# or `pacman`
pacman -S xclip

# or `dnf`
dnf install xclip

यदि आपके पास apt-get न पहुंच और न ही dnf तक पहुंच है, न ही dnf , स्रोत sourceforge पर उपलब्ध हैं।

सेट अप

दे घुमा के

~/.bash_aliases , जोड़ें:

alias setclip="xclip -selection c"
alias getclip="xclip -selection c -o"

अपने नए कॉन्फ़िगरेशन का उपयोग करके लोड करना न भूलें . ~/.bash_aliases . ~/.bash_aliases या अपनी प्रोफ़ाइल को पुनरारंभ करके।

मछली

~/.config/fish/config.fish , जोड़ें:

abbr setclip "xclip -selection c"
abbr getclip "xclip -selection c -o"

आवेदन करने के लिए अपने टर्मिनल को पुनरारंभ करके अपने मछली के उदाहरण को पुनरारंभ करना न भूलें।

प्रयोग

अब आप setclip और getclip उपयोग कर सकते हैं, उदाहरण के लिए:

$ echo foo | setclip
$ getclip
foo



प्रयत्न

xclip

xclip - command line interface to X selections (clipboard) 

man




यहां क्लिपबोर्ड पढ़ने के लिए बैश स्क्रिप्ट का उपयोग करने के लिए तैयार है जो एकाधिक प्लेटफॉर्म पर काम करता है। यदि आप कार्यक्षमता जोड़ते हैं तो कृपया स्क्रिप्ट को संपादित करें (उदाहरण के लिए अधिक प्लेटफ़ॉर्म)।

#!/bin/bash
# WF 2013-10-04
# multi platform clipboard read access
# supports
#   Mac OS X
#   git shell / Cygwin (Windows)
#   Linux (e.g. Ubuntu)

#
# display an error
#
error() {
  echo "error: $1" 1>&2
  exit 1
}

#
# getClipboard
#
function getClipboard() {
 os=`uname`
      case $os in 
        # git bash  (Windows)
        MINGW32_NT-6.1)
          cat /dev/clipboard;;
        # Mac OS X
        Darwin*)
          pbpaste;;  
        # Linux 
        Linux*)
          # works only for X clipboard - a check that X is running might be due
          xclip -o;;
        *)
          error "unsupported os $os";;
      esac
}

tmp=/tmp/clipboard$$
getClipboard >$tmp
cat $tmp
# comment out for debugging
rm $tmp



केवल मैक के लिए:

echo "Hello World" | pbcopy
pbpaste

ये स्थित हैं /usr/bin/pbcopy और /usr/bin/pbpaste




विंडोज़ (साइगविन) में क्लिपबोर्ड पर कॉपी और पेस्ट करें:

देख:

$ clip.exe -?

सीएलआईपी विवरण: विंडोज क्लिपबोर्ड पर कमांड लाइन टूल्स का आउटपुट रीडायरेक्ट करता है। इस पाठ आउटपुट को अन्य कार्यक्रमों में चिपकाया जा सकता है। पैरामीटर सूची: /? इस सहायता संदेश को प्रदर्शित करता है। उदाहरण: डीआईआर | CLIP विंडोज क्लिपबोर्ड में वर्तमान निर्देशिका सूची की एक प्रति स्थान रखता है। CLIP <README.TXT पाठ की एक प्रति को readme.txt से विंडोज क्लिपबोर्ड पर रखें।

Getclip भी मौजूद है (Shift + ins के बजाय उपयोग किया जा सकता है!), Putclip (echo oaeuoa | putclip.exe इसे क्लिप में डालने के लिए)




वाह, मैं विश्वास नहीं कर सकता कि इस प्रश्न के लिए कितने जवाब हैं। मैं नहीं कह सकता कि मैंने उन सभी की कोशिश की है लेकिन मैंने शीर्ष 3 या 4 की कोशिश की है और उनमें से कोई भी मेरे लिए काम नहीं करता है। मेरे लिए क्या काम किया गया था जिसे डौग नामक उपयोगकर्ता द्वारा लिखी गई टिप्पणी में से एक में स्थित उत्तर था। चूंकि मुझे यह बहुत उपयोगी लगता है, इसलिए मैंने एक जवाब में पुन: प्रयास करने का फैसला किया।

Xcopy उपयोगिता स्थापित करें और जब आप टर्मिनल में हों, इनपुट:

प्रतिलिपि

Thing_you_want_to_copy|xclip -selection c

चिपकाएं

myvariable=$(xclip -selection clipboard -o)

मैंने जवाबों की बहुत सारी टिप्पणियों को देखा है जो पीबीपीस्ट और पीबीसीपी की सिफारिश की गई है। यदि आप उन उपयोगिताओं में हैं लेकिन किसी कारण से वे आपके रेपो पर उपलब्ध नहीं हैं, तो आप हमेशा xcopy कमांड के लिए उपनाम बना सकते हैं और उन्हें pbpaste और pbcopy कह सकते हैं।

alias pbcopy="xclip -selection c" 
alias pbpaste="xclip -selection clipboard -o" 

तो फिर यह इस तरह दिखेगा:

Thing_you_want_to_copy|pbcopy
myvariable=$(pbpaste)



यदि आप मेरे जैसे हैं और रूट विशेषाधिकारों के बिना लिनक्स सर्वर पर चलते हैं और कोई एक्सक्लिप या जीपीएम नहीं है तो आप केवल एक अस्थायी फ़ाइल का उपयोग करके इस समस्या को हल कर सकते हैं। उदाहरण के लिए:

$ echo "hello world" > ~/clip
$ echo `cat ~/clip`
hello world



कुछ तरीके हैं। उल्लेख किए गए कुछ तरीकों में शामिल हैं (मुझे लगता है) tmux, स्क्रीन, vim, emacs, और खोल। मैं emacs या स्क्रीन नहीं जानता, तो मैं अन्य तीनों पर जाना होगा।

Tmux

एक्स चयन नहीं होने पर, tmux में एक प्रतिलिपि मोड prefix माध्यम से सुलभ prefix-[ (डिफ़ॉल्ट रूप से prefix Ctrl + B है)। इस मोड के लिए उपयोग किया जाने वाला बफर अलग है और टीएमयूक्स के लिए अनन्य है, जो काफी संभावनाएं खुलता है और सही परिस्थितियों में एक्स चयनों की तुलना में इसे अधिक बहुमुखी बनाता है।

इस मोड से बाहर निकलने के लिए, q दबाएं; नेविगेट करने के लिए, अपने vim या emacs बाध्यकारी (डिफ़ॉल्ट = vim) का उपयोग करें, इसलिए आंदोलन के लिए hjkl , चरित्र / रेखा / ब्लॉक चयन आदि के लिए v/V/Cv hjkl । जब आपके पास चयन होता है, तो प्रतिलिपि बनाने के लिए एंटर दबाएं और मोड से बाहर निकलें।

इस बफर से पेस्ट करने के लिए, prefix-] उपयोग करें।

खोल

X11 की कोई भी स्थापना डिफ़ॉल्ट रूप से दो प्रोग्रामों के साथ आती है: xclip और xsel (kinda जैसे यह xinit और xinit दोनों के साथ भी आता है)। अधिकांश अन्य उत्तरों xclip जिक्र xclip , और मुझे वास्तव में इसकी xsel लिए xsel पसंद है, इसलिए मैं xsel को कवर करने जा रहा हूं।

xsel(1x) :

इनपुट विकल्प

-ए, - अनुपूरक

चयन में मानक इनपुट संलग्न करें। मतलब है - i

-एफ, - फॉलो करें

मानक इनपुट बढ़ने के रूप में चयन में संलग्न करें। मतलब है - i

-i, - इनपुट

चयन में मानक इनपुट पढ़ें।

आउटपुट विकल्प

-o, --output

मानक आउटपुट में चयन लिखें।

कार्य विकल्प

-सी, - स्पष्ट

चयन साफ़ करें। सभी इनपुट विकल्पों को ओवरराइड करता है।

-d, --delete

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

चयन विकल्प

-पी, - प्राइमरी

प्राथमिक चयन (डिफ़ॉल्ट) पर काम करें।

-s, - सेकेंडरी

माध्यमिक चयन पर काम करें।

-बी, - क्लिपबोर्ड

CLIPBOARD चयन पर काम करें।

और यह सब कुछ आपको जानने की जरूरत है। PRIMARY लिए p (या कुछ भी नहीं), CLIPBOARD , CLIPBOARD लिए b , आउटपुट के लिए o

उदाहरण: कहें कि मैं एक टीटीवी से foo के आउटपुट की प्रतिलिपि बनाना चाहता हूं और इसे एक बग रिपोर्ट के लिए वेबपृष्ठ पर पेस्ट करना चाहता हूं। ऐसा करने के लिए, टीटीई / एक्स सत्र में / से कॉपी करना आदर्श होगा। तो सवाल यह है कि मैं टीटीवी से क्लिपबोर्ड तक कैसे पहुंच सकता हूं?

इस उदाहरण के लिए, हम मान लेंगे कि एक्स सत्र प्रदर्शन पर है :1

$ foo -v
Error: not a real TTY
details:
blah blah @ 0x0000000040abeaf4
blah blah @ 0x0000000040abeaf8
blah blah @ 0x0000000040abeafc
blah blah @ 0x0000000040abeb00
...
$ foo -v | DISPLAY=:1 xsel -b # copies it into clipboard of display :1

फिर मैं सामान्य रूप से इसे फॉर्म में Ctrl-V कर सकता हूं।

अब कहें कि समर्थन साइट पर कोई मुझे समस्या को ठीक करने के लिए चलाने के लिए एक आदेश देता है। यह जटिल और लंबा है।

$ DISPLAY=:1 xsel -bo
sudo foo --update --clear-cache --source-list="http://foo-software.com/repository/foo/debian/ubuntu/xenial/164914519191464/sources.txt"
$ $(DISPLAY=:1 xsel -bo)
Password for braden:
UPDATING %%%%%%%%%%%%%%%%%%%%%%% 100.00%
Clearing cache...
Fetching sources...
Reticulating splines...
Watering trees...
Climbing mountains...
Looking advanced...
Done.
$ foo
Thank you for your order. A pizza should arrive at your house in the next 20 minutes. Your total is $6.99

पिज्जा ऑर्डरिंग कमांड लाइन के उत्पादक उपयोग की तरह प्रतीत होता है।

...आगे बढ़ते रहना।

शक्ति

यदि +clipboard साथ संकलित किया गया है (यह महत्वपूर्ण है! अपने vim --version जांच करें), विम को एक्स PRIMARY और CLIPBOARD चयनों तक पहुंच होनी चाहिए। दो चयन क्रमशः * और + रजिस्टरों से उपलब्ध हैं, और आपके अवकाश पर किसी भी अन्य रजिस्टर के समान ही लिखा जा सकता है और पढ़ा जा सकता है। उदाहरण के लिए:

:%y+    ; copy/yank (y) everything (%) into the CLIPBOARD selection (+)
"+p     ; select (") the CLIPBOARD selection (+) and paste/put it
ggVG"+y ; Alternative version of the first example

यदि विम की आपकी प्रति सीधे एक्स चयनों तक पहुंच का समर्थन नहीं करती है, हालांकि, यह दुनिया का अंत नहीं है। आप पिछले खंड में वर्णित xsel तकनीक का उपयोग कर सकते हैं।

:r ! xsel -bo ; read  (r) from the stdout of (!) `xsel -bo`
:w ! xsel -b  ; write (w) to the stdin of    (!) `xsel -b`

कुछ महत्वपूर्ण combos बांधें और आपको अच्छा होना चाहिए।




2018 उत्तर

clipboard-cli प्रयोग करें। यह किसी भी वास्तविक मुद्दों के बिना मैकोज़, विंडोज, लिनक्स, ओपनबीएसडी, फ्रीबीएसडी, और एंड्रॉइड के साथ काम करता है।

इसके साथ स्थापित करें:

npm install -g clipboard-cli

फिर आप कर सकते हैं

echo foo | clipboard

यदि आप चाहते हैं, तो आप निम्नलिखित को अपने .bashrc , .bash_profile , या .zshrc में डालकर cb को उपनाम कर सकते हैं:

alias cb=clipboard




हालांकि> 1 साल बाद, मैं थोड़ा अलग समाधान साझा करता हूं। उम्मीद है कि यह किसी के लिए उपयोगी है।

कल मैंने खुद को इस सवाल के साथ पाया: "विभिन्न उपयोगकर्ता सत्रों के बीच क्लिपबोर्ड कैसे साझा करें?"Ctrl alt f7 - ctrl alt f8 के साथ सत्रों के बीच स्विच करते समय, वास्तव में, आप जो कॉपी करते हैं उसे पेस्ट नहीं कर सकते हैं।

मैं एक नामित पाइप के आधार पर निम्नलिखित त्वरित और गंदे समाधान के साथ आया था। यह निश्चित रूप से काफी नंगे और कच्चे है, लेकिन मुझे यह कार्यात्मक पाया गया:

[email protected]:~$ mkfifo /tmp/sharedClip

फिर भेजने के टर्मिनल में

[email protected]:~$ cat > /tmp/sharedClip

आखिरी, प्राप्त टर्मिनल में:

[email protected]:~$ cat /tmp/sharedClip

अब, आप पहले टर्मिनल में कुछ टाइप या पेस्ट करते हैं, और ( रिटर्न मारने के बाद), यह तुरंत प्राप्त टर्मिनल में दिखाई देगा, जहां से आप कहीं भी कहीं भी कॉपी / पेस्ट कर सकते हैं।

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




मैकोज़ में pbpaste उपयोग pbpaste

उदाहरण के लिए:

क्लिपबोर्ड अपडेट करें

pbpaste | ruby -ne ' puts "\|" + $_.split( )[1..4].join("\|") ' | pbcopy

का आनंद लें।




Related