Bash betiğinde panoya / panodan aktarma


946

Bash'te panoya / panodan boru bağlantısı yapmak mümkün müdür?

İster bir cihaz tutamacına / cihazından boru bağlantısı ister yardımcı bir uygulama kullanıyor olsun, hiçbir şey bulamıyorum.

Örneğin /dev/clip, panoya bağlanan bir cihaz olsaydı şunları yapabiliriz:

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

3
:%y+Vim'de kullanıyorum , vim-speak "yank (copy) '+' register (X PRIMARYclipboard) 'a tüm satırları . %Spesifik olmak istiyorsanız bir aralıkla değiştirebilirsiniz . Ancak üç uyarı vardır: 1. Şimdi, kopyalayabilmeniz için herhangi bir metni bir dosyaya kaydetmeniz gerekir. Bu, xclipcevaplarda bahsedilen komutun aksine . 2. Nasıl vim yapacağınızı bilmiyorsanız, bu sıkıcı olabilir. 3. Bunu yalnızca vim derlenirken belirli bir özellik etkinse yapabilirsiniz. GVim yüklerseniz, vim'in hem GUI'sinde hem de terminal örneklerinde varsayılan olarak etkinleştirilmelidir.
Braden Best

1
@BradenBest bunu bir cevap olarak koymalısınız. NIX ortamındayım ve yüklenemedi xclip. Yanıtınız bir cazibe gibi çalıştı.
HankCa

@HankCa Tamam, bir cevap gönderdim . Bana ne düşündüğünü söyle.
Braden Best

@BradenBest çok kapsamlı bir cevap. Ben sadece :%y+birini sevdim ama Tamam, tüm üsleri kapalı var! İyi bir.
HankCa

Başka bir seçenek: küçük bir perl betiği kullanma: kurulum gerektirmez. Bkz aşağıda Cevabımı .
VonC

Yanıtlar:


862

Karşılaşabileceğiniz çok sayıda pano var. Muhtemelen X Windows birincil panosuna bir şeyler koymak isteyen bir Linux kullanıcısısınız. Genellikle, konuşmak istediğiniz panoda konuşmanızı sağlayan bir yardımcı program bulunur.

X durumunda, xclip(ve diğerleri) var. xclip -selection cile çalışır panoya veri gönderir Ctrl + C, Ctrl + Vçoğu uygulamada.

Mac OS X kullanıyorsanız, var pbcopy.

Linux terminal modundaysanız (X yok) , panosu olan ekrana bakın gpmveya ekrana bakın . screenKomutu deneyin readreg.

, Windows 10+ veya cygwin, kullanım altında /dev/clipboardveya clip.



24
Windows'da, /dev/clipboardMsys / MinGW bash kabukları için de çalışıyor
Mihai Rotaru

71
xclip -selection cÇoğu uygulamada ^ C, ^ V ile çalışan panoya veri göndereceğini unutmayın
Klaas van Schelven

31
yeni windows sürümlerinde sadece şöyle kullanabilirsiniz clip:dir | clip
maep

11
GNU / Linux'un böyle bir cihazı olmadığı üzücü /dev/clipboardve en azından Kubuntu'da varsayılan olarak eksik olan gpm'yi ya xclip'i yüklemeye zorlar (sanırım diğer birçok dağıtımda da) .
Hi-Angel

282

Kullandığınızdan emin olun, alias xclip="xclip -selection c" aksi takdirde Ctrl+ ' vyı başka bir yere yapıştırmak için kullanamazsınız .

echo test | xclip    

Ctrl+v === test


1
Kişi bu komut argümanı olmadan nasıl yapıştırılır ?
Jonah

15
xclip -selection clipboard -o
doug

32
osx ve linux arasında ileri geri gidip geldiğim için dotfiles dosyamda şu var. alias pbcopy="xclip -selection c" alias pbpaste="xclip -selection clipboard -o" Umarım yardımcı olur.
doug

15
@ApockofFork, xclipbir satırsonu eklemez, echoöyle. Deneyin printf test | xclip -i -selection clipboard. ( printfsiz yazmadığınız sürece yeni bir satır eklemez 'test\n'.)
David X

7
Veya echo -nyerine kullanın printf.
Christian Pietsch

182

Yüklemek

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

# or `pacman`
pacman -S xclip

# or `dnf`
dnf install xclip

Erişiminizin yoksa apt-getne pacman, ne dnf, kaynaklar mevcuttur sourceforge .

Kurmak

darbe

Şuraya ~/.bash_aliasesekleyin:

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

. ~/.bash_aliasesProfilinizi kullanarak veya yeniden başlatarak yeni yapılandırmanızı yüklemeyi unutmayın .

Balık

Şuraya ~/.config/fish/config.fishekleyin:

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

Değişikliklerin uygulanması için terminalinizi yeniden başlatarak balık örneğinizi yeniden başlatmayı unutmayın.

kullanım

Artık setclipve getclipörneğin:

$ echo foo | setclip
$ getclip
foo

3
Diğer tüm dağıtımlar için: gelen kaynak indirebilirsiniz sourceforge.net/projects/xclip
SCz

+1 En iyi çözüm! Arch'de sudo pacman -S xclip,. Ama .bashrcbunun en iyi yer olmadığını unutmayın . Son kullanıcının uygun bashrc, bash_aliases ve .profile dosyalarında okumasını ve bash'ın her birini nasıl işlediğini öneririm. İpucu: Bunun yerine .bash_aliases içine koyun.
eduncan911

1
Teşekkürler @ eduncan911! :) pacmanPaket yöneticisini kullanma seçeneği eklendi ve .bashrcöneri kaldırıldı . .bash_aliasesDaha uyarlanmış olduğunu biliyorum , ama sonuç aynı ( .bashrcsadece .bash_aliasesvarsa gerektirir ). İnsanlar dağınık bir sistem istiyorlarsa, bir sistemi olsun. :)
tleb

@EladTabak Mutlu yardımcı oldu.
tleb

1
@ jpaugh haklısın. Benim .bashrckaynakları .bash_aliasessonunda. ;) Arch, Ubuntu / Debian, Raspberry varyantları, macOS / OSX ve Windows Bash'da % 100 uyumlu kalan bu eski kuralı takip ediyorum: stefaanlippens.net/my_bashrc_aliases_profile_and_other_stuff Bu kurala tüm makinelerde aynı dotfiles'i kullanıyorum Dokunuyorum. Oldukça güzel: github.com/eduncan911/dotfiles
eduncan911

143

MacOS'ta yerleşik pbcopyve pbpastekomutları kullanın.

Örneğin,

cat ~/.bashrc | pbcopy

~/.bashrcdosyanın içeriği Cmd+ vkısayoluyla yapıştırma için kullanılabilir .



25

Debian / Ubuntu / Mint üzerinde xsel

# append to clipboard:
cat 'the file with content' | xsel -ib

# or type in the happy face :) and ...
echo 'the happy face :) and content' | xsel -ib

# show clipboard
xsel -b

# Get more info:
man xsel

Yüklemek

sudo apt-get install xsel

Bunun farkı echo "foo" | xclip -selection cnedir?
Léo Léopold Hertz 준영

Orada bu konuda bazı cevaplar sor Ubuntu cevap , ama esas xselve xclipdışında her şekilde eşdeğerdir xclipadıyla / yazma dosyaları okuyabilir, ancak xselbir dosyaya erişmek istiyorsanız kabuk yönlendirmeyi gerektirir.
Colin D Bennett

xselxclip sadece komut isteminden çalışırken , komut dosyalarından güzel çalışıyor. Emin değilim neden.
NVRM

16

Vay be, bu soru için kaç cevap olduğuna inanamıyorum. Hepsini denedim ama ilk 3 ya da 4'ü denedim ve hiçbiri benim için çalışmıyor. Benim için işe yarayan şey, doug adlı bir kullanıcı tarafından yazılan yorumlardan birinde bulunan bir cevaptı. Çok yararlı bulduğumdan, bir cevapta yeniden ifade etmeye karar verdim.

Xcopy yardımcı programını yükleyin ve Terminal'deyken şunu girin:

kopya

Thing_you_want_to_copy|xclip -selection c

Yapıştırmak

myvariable=$(xclip -selection clipboard -o)

Ben pbpaste ve pbcopy önerilen cevaplar bir sürü fark ettim. Bu yardımcı programlara giriyorsanız, ancak herhangi bir nedenle repolarınızda mevcut değilse, xcopy komutları için her zaman bir takma ad oluşturabilir ve bunları pbpaste ve pbcopy olarak adlandırabilirsiniz.

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

O zaman şöyle görünecektir:

Thing_you_want_to_copy|pbcopy
myvariable=$(pbpaste)

Harika, takma adınız MacOS'a oldukça iyi karşılık geliyor.
MeadowMuffins

15

2018 cevabı

Clipboard-cli kullanın . Herhangi bir gerçek sorun olmadan macOS, Windows, Linux, OpenBSD, FreeBSD ve Android ile çalışır.

Şununla yükle:

npm install -g clipboard-cli

Sonra yapabilirsin

echo foo | clipboard

İsterseniz, aşağıdakileri yapabilirsiniz takma için cbGözlerinde farklı aşağıdakileri koyarak .bashrc, .bash_profileya da .zshrc:

alias cb=clipboard


2
Güvenli bir npmpaket olduğundan emin misiniz ?
Johnny

3
@Stas, umarım , en üretken düğüm katkısı Sindresorhus ( github.com/sindresorhus ) tarafından yapılmıştır . Ava test kütüphanesi, xo linter, Yeoman ve sayısız diğer projeden sorumlu. Ayrıca, kodunu internetteki hemen hemen her JS kullanan web sitesine toplu olarak koyan sayısız küçük kütüphaneden de sorumludur. Bu, taviz verilemeyeceği anlamına gelmez; sadece depolarındaki gözlerin miktarı ve kendi itibarı, onu rastgele npm depolarından çok daha az olası kılar.
Evan Conrad

Güzel! Xclip'in çalışmadığı Ubuntu GNU / Linux üzerinde çalışıyor.
Kevin Buchs

14

Linux için Windows alt sisteminde clip.exe ile panoya kopyalayabilirsiniz.

cat file | clip.exe

|Pipe komutunu kullanmayı unutmayın . Ve bir >komut değil , çünkü bu işe yaramayacak.


11

Birden fazla platformda çalışan panoya okumak için kullanıma hazır bir betiği burada bulabilirsiniz. İşlev eklerseniz (örn. Daha fazla platform) lütfen betiği burada düzenleyin.

#!/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

bruhh, bu gerçekten işe yarıyor neden cevap bu değil?
255.tar.xz

9

Windows'ta (Cygwin ile) deneyin cat /dev/clipboardveya bu makalede echo "foo" > /dev/clipboardbelirtildiği gibi .


1
User @maep'in ayrı bir yorumda belirtildiği gibi, Windows'un daha yeni sürümleri (yalnızca Win10 için onaylayabilirim) basitçe iletebilir clip. Msysgit 1.9.5 kullanıyorum ve bu işe yaradı.
Shawn Erquhart

echo "foo" > /dev/clipboardyeni satırları tamamen yok ediyor gibi görünüyor (bir \ r \ n \ n şey değil ama tamamen gitti)
user1529413

9

Yalnızca Mac için:

echo "Hello World" | pbcopy
pbpaste

Bunlar bulunur /usr/bin/pbcopyve /usr/bin/pbpaste.


8

Linux'ta farklı panolar var; X sunucusunda bir tane var, pencere yöneticisinde başka bir tane olabilir, vb. Standart bir cihaz yok.

Oh, evet, CLI'da, ekran programının Emacs ve vi gibi diğer uygulamaların yanı sıra kendi panosu da var .

X'te xclip kullanabilirsiniz .

Bu konuyu diğer olası cevaplar için kontrol edebilirsiniz: http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html


2
/ Dev / clip oluşturmanın birisi için iyi bir proje olacağı anlaşılıyor.
TED

2
Birden fazla panonun farkındayım. Bu, sorumu cevaplamayı nasıl zorlaştırıyor?
moinudin

Panoların standartlaştırılması mantıklı olurdu, eğer onlara erişmek için / dev / clip1, / ​​dev / clip2 .. / dev / clip <n> kullanabiliyorsanız muhtemelen zarar görmez, tek sorun kullanıcıların özel olması ve cihazlar sistem çapındadır. Ancak, erişen UID'ye göre maskelenen bir çekirdek aygıt sürücüsü yaparsanız, beklendiği gibi çalışması gerekir.

5

Windows'ta kopyalayıp panoya yapıştır (Cygwin):

Görmek:

$ clip.exe -?

CLIP
Description:
    Redirects output of command line tools to the Windows clipboard.
    This text output can then be pasted into other programs.
Parameter List:
/?                  Displays this help message.
Examples:
DIR | CLIP          Places a copy of the current directory
                        listing into the Windows clipboard.
CLIP < README.TXT   Places a copy of the text from readme.txt
                        on to the Windows clipboard.

Ayrıca getclip ( Shift+ Ins! Yerine kullanılabilir ) ve putclip (klibe koymak için echo oaeuoa | putclip.exe) mevcuttur.


4

Bu sadece ihtiyacınız olanı yapan basit bir Python betiğidir:

#!/usr/bin/python

import sys

# Clipboard storage
clipboard_file = '/tmp/clipboard.tmp'

if(sys.stdin.isatty()): # Should write clipboard contents out to stdout
    with open(clipboard_file, 'r') as c:
        sys.stdout.write(c.read())
elif(sys.stdout.isatty()): # Should save stdin to clipboard
    with open(clipboard_file, 'w') as c:
        c.write(sys.stdin.read())

Bunu yolunuzda bir yerde çalıştırılabilir olarak kaydedin (Şuraya kaydettim /usr/local/bin/clip. Panonuza kaydedilecek şeyleri aktarabilirsiniz ...

echo "Hello World" | clip

Ve panonuzdakileri başka bir programa aktarabilirsiniz ...

clip | cowsay
 _____________
< Hello World >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Kendi başına çalıştırmak, panodaki içeriği çıkarır.


Bu, tek bir bilgisayardayken çalışır, ancak bilgisayarlar arasında bir şeyler kopyalamanıza izin vermez.
Charles Plager

yalnızca "echo str> tmpfile" gibi görünüyor ve cat tmpfilepano işlemi değil. // @horta cevaplarıyla aynı.
yurenchen

bu pano değişkeni ayarlanmış gibi görünmüyor, bu yüzden içeriği başka bir uygulamaya yapıştıramıyorum - gerçek bir pano değil!
jena

4

İyi bir referans buldum: /unix/69111/

Benim durumumda panoya içerik yapıştırmak ve ayrıca orada yapıştırılan ne görmek istiyorum, bu yüzden de teebir dosya tanımlayıcı ile komut kullanılır :

echo "just a test" | tee >(xclip -i -selection clipboard)

>()bir süreç ikamesi şeklidir. bash, parantez içindeki programın standart girdisine bağlanan bir dosya tanımlayıcı yolunu her biri ile değiştirir.

teeKomut "boru içeriği" size izin komutunuzla çatallar ve standart çıktı "stdout'ta" konulu sonucunu görmek

ayrıca panoda almak ve yazmak için takma adlar oluşturabilir, böylece "pbcopy" ve "pbpaste" komutlarını MAC'ta olduğu gibi kullanabilirsiniz. Benim durumumda, zsh kullandığım için bu diğer ad dosyamda var:

(( $+commands[xclip] )) && {
    alias pbpaste='xclip -i -selection clipboard -o'
    alias pbcopy='xclip -selection clipboard'
}

(( $+command[name] ))zsh testlerde komut "ismi" sisteminizde yüklüyse, daha sonra her iki takma adlar ile gruplandırılmış {}. bu &&bir ikili VE, eğer b sonra b, bu nedenle xclip varsa takma adlar ayarlanır.

echo "another test" | tee >(pbcopy)

Pano içeriğinizi almak için şunu yazın:

pbpaste | "any-command-you-need-here"


2

Yıllar önce yazdığım birkaç Windows programı. Onlar panoya dökmek, itmek, eklemek ve yazdırmak için izin verir. Şöyle çalışır:

dumpclip | perl -pe "s/monkey/chimp/g;" | pushclip

Kaynak kodu içerir: cmd_clip.zip


2

Birkaç yol var. Bahsedilen yollardan bazıları (sanırım) tmux, ekran, vim, emacs ve kabuğu içerir. Emacs veya ekran bilmiyorum, bu yüzden diğer üçünden geçeceğim.

tmux

X seçimi olmasa da, tmux'un erişebileceği bir kopyalama modu vardır prefix-[( varsayılan prefixolarak Ctrl+ B). Bu mod için kullanılan arabellek ayrı ve tmux'a özeldir, bu da birkaç olasılık açar ve doğru durumlarda X seçimlerinden daha çok yönlü hale getirir.

Bu moddan çıkmak için q; gezinmek, kullanmak vimveya emacsciltlemek için (default = vim), hjklhareket v/V/C-viçin, karakter / satır / blok seçimi vb. için. Seçiminizi yaptığınızda, Enterkopyalamak ve moddan çıkmak için tuşuna basın.

Bu arabellekten yapıştırmak için kullanın prefix-].

Kabuk

Herhangi kurulum X11: varsayılan olarak iki program ile gelmek gibi görünüyor xclipve xsel(tür aynı zamanda her ikisi de bulunur nasıl gibi startxve xinit). Diğer cevapların çoğu belirtiyor xclipve ben xselonun kısalığını gerçekten seviyorum , bu yüzden kapsayacağım xsel.

Gönderen xsel (1x) :

Giriş seçenekleri

-a, --ekle

seçime standart girdi ekle. İma -i .

-f, --takip et

standart girdi büyüdükçe seçime ekleyin. İma -i .

-i, --input

seçime standart girişi okuyun.

Çıktı seçenekleri

-o, --çıkış

seçimi standart çıktıya yazar.

İşlem seçenekleri

-c, - temizle

seçimi temizle. Tüm giriş seçeneklerini geçersiz kılar.

-d, - sil

Geçerli seçimin silinmesini isteyin. Bu sadece seçimi temizlemez, aynı zamanda seçimin seçilen içeriğin silinmesini sağladığı programa da istekte bulunur. Tüm giriş seçeneklerini geçersiz kılar.

Seçim seçenekleri

-p, --primary

PRIMARY seçiminde çalışır (varsayılan).

-s, - ikincil

SEKONDER seçiminde çalışır.

-b, --clipboard

CLIPBOARD seçiminde çalışır.

Ve bu bilmeniz gereken her şeyle ilgili. piçin (veya başka bir şey) PRIMARY, siçin SECONDARY, biçin CLIPBOARD, oçıkış için.

Örnek: Diyelim ki foobir TTY'nin çıktısını kopyalayıp bir hata raporu için bir web sayfasına yapıştırmak istiyorum. Bunu yapmak için, TTY / X oturumuna / oturumundan kopyalamak ideal olacaktır. Yani soru TTY'den panoya nasıl erişebilirim?

Bu örnekte, X oturumunun görüntülendiğini varsayacağız :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

Sonra Ctrl-Vher zamanki gibi forma girebilirim.

Şimdi destek sitesindeki birisinin sorunu düzeltmek için çalıştırmam için bir komut verdiğini söyleyin. Karmaşık ve uzun.

$ 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

Pizza siparişi komut satırının verimli kullanımı gibi görünüyor.

...hareketli.

gayret

İle derlenmişse +clipboard(Bu önemlidir! Kontrol edin vim --version), Vim X PRIMARYve CLIPBOARDseçimlere erişebilmelidir . İki seçime sırasıyla *ve +kayıtlarından erişilebilir ve boş zamanlarınızda diğer kayıtlarla aynı şekilde yazılabilir ve okunabilir. Örneğin:

:%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

Eğer vim kopyanız X seçimlerine erişimi doğrudan desteklemiyorsa, bu dünyanın sonu değildir. xselTekniği sadece son bölümde açıklandığı gibi kullanabilirsiniz .

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

Birkaç anahtar kombinasyonunu bağlayın ve iyi olmalısınız.


Kesinlikle DISPLAY=X olmayan bir ortamdan bir X uygulaması çağırırken kullanmayı unutmayın . X uygulamalarının DISPLAYkonuştukları sunucuyu bulmak için ortam değişkenine ihtiyacı var (veya birden fazla oturumu işleyen tek bir sunucu var mı?). Örneğin, bir TTY'den deneyin DISPLAY=:1 firefox(veya görünen kimliğiniz ne olursa olsun; benimki sadece olur :1).
Braden Best

Benim için çevremdeki seçim :%y+VIM'di.
HankCa

2

Bu iş parçacığından, herhangi bir gclip/ xclip/ xselüçüncü taraf yazılımı yüklemeyi gerektirmeyen bir seçenek vardır .

Perl betiği (perl genellikle her zaman yüklendiğinden)

use Win32::Clipboard;
print Win32::Clipboard::GetText();

Bunu nasıl kullanırım? Komut dosyasını PATH'a kaydet ve içine aktar? Paylaşım bağlantıları kopyalamak için dropbox cli sarıcı yazmaya çalışıyorum, bu yüzden sadece metin işlemek gerekiyor.
jena


2

pbcopy OSX'te üretilmiştir:

.Bash_profile içeriğini kopyalama:

cat ~/.bash_profile | pbcopy

1

MacOS'ta kullanın pbpaste.

Örneğin:

Panoyu güncelleme

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

1

Benim gibi ve kök ayrıcalıkları olmayan bir Linux sunucusunda çalışıyor ve xclip veya GPM yoksa, bu sorunu geçici bir dosya kullanarak geçici olarak çözebilirsiniz. Örneğin:

$ echo "Hello, World!" > ~/clip
$ echo `cat ~/clip`
Hello, World!

Kök imtiyaz eksikliğinin bunu nasıl etkilediğini görmüyorum.
Braden Best

3
@BradenBest Kök ayrıcalıklarının olmaması bir şey yükleyemediğim anlamına geliyor.
horta

Ama ne kuruyorsun? X? Bir sunucuda mı? Bazı garip X yönlendirme servisine ev sahipliği yapmadığınız sürece, neden bunu yapmak istediğinizi anlayamıyorum.
Braden Best

@BradenBest Emin değilim. Hangi program veya hizmet kopya yapıştırmamı sağlar.
horta

1
Eh, X selections(zorunlu olarak "pano" tarafından ima edilen ve xclip / xsel'den bahsettiğimiz) herhangi birini kullanıyorsanız, etkin bir X oturumuna (ve dolayısıyla bir X sunucusuna) ihtiyacınız vardır. ilk yer. Ne demek istediğimi görmek DISPLAY="" xseliçin yerel makinenizde çalışmayı deneyin . Bir hatadan çıkarak oturum bulamıyor ""ve herhangi bir X seçimi ile etkileşim yapılmayacak. Bu yüzden başlangıçta kök ayrıcalıklarının bunu nasıl etkilediğini görmediğimi söyledim: kök veya kök yok, bir sunucu ortamında bir X seçimi bulamazsınız.
Braden Best


1

Wayland xcopy çalışmıyor gibi görünüyor, onun yerine wl-clipboard kullanın. örneğin fedora'da

sudo dnf install wl-clipboard

tree | wl-copy

wl-paste > file


0

> 1 yıl sonra da biraz farklı bir çözüm paylaşıyorum. Umarım bu birisi için faydalıdır.

Dün kendimi şu soruyu buldum: "Panoyu farklı kullanıcı oturumları arasında nasıl paylaşabilirim?" . ctrlaltF7- ile oturumlar arasında geçiş yaparken ctrlaltF8, aslında kopyaladığınız şeyi yapıştıramazsınız.

Adlandırılmış bir boruya dayanan aşağıdaki hızlı ve kirli çözümü buldum . Kesinlikle oldukça çıplak ve ham, ama işlevsel buldum:

user1@host:~$ mkfifo /tmp/sharedClip

sonra gönderen terminalde

user1@host:~$ cat > /tmp/sharedClip

son olarak, alıcı terminalde:

user2@host:~$ cat /tmp/sharedClip

Şimdi, ilk terminale herhangi bir şey yazıyorsunuz veya yapıştırıyorsunuz ve (vurduktan sonra return), alıcı terminalde hemen görünecek ve buradan istediğiniz yere tekrar Kopyala / Yapıştırın.

Tabii ki bu sadece user2'nin panosundaki içeriği kesinlikle user2'nin panosunda kullanılabilir hale getirmekle kalmaz, bunun yerine ek bir çift Yapıştır ve Kopyala tıklaması gerektirir.


Çok şaşırtıcı görünmüyor. İki farklı X sunucusu = iki farklı seçim seti. Ancak, olabilir yoluyla giriş / çıkış alan bir senaryo kurmak xsel/xclip. Örneğin, bir uç seçimlerden herhangi birinin değişip değişmediğini görmek için dinler ve ardından otomatik olarak (adlandırılmış FIFO aracılığıyla) kendi X seçimine ekleyen bir veya daha fazla kanalı dinleyen diğer komut dosyasına yönlendirir. Böylece metin kopyalandığında, otomatik olarak diğer X oturumunun seçiminde aynı metin görünecektir. Ve unutma $DISPLAY.
Braden Best

0

Ruby oneliner bana python ile denemem için ilham verdi.

Diyelim ki 4 boşluklu panodaki her şeyi girintili yapan bir komut istiyoruz. Stackoverflow üzerinde parçacıkları paylaşmak için mükemmeldir.

$ pbpaste | python -c "import sys
 for line in sys.stdin:
   print(f'    {line}')" | pbcopy

bu bir yazım hatası değil. Python for döngüsü için yeni satırlara ihtiyaç duyar. Hafızada fazladan bir dizi oluşturmaktan kaçınmak için satırları bir geçişte değiştirmek istiyoruz.

Eğer ekstra dizi oluşturmak sakıncası yoksa deneyin:

$ pbpaste | python -c "import sys; print(''.join([f'    {l}' for l in sys.stdin]))" | pbcopy

ama dürüst olmak gerekirse awk python'dan daha iyidir. Benim de bu takma adı tanımlanmış ~/.bashrcdosyası

alias indent="pbpaste | awk '{print \"    \"\$0}' | pbcopy"

Şimdi çalıştırdığımda indentpanomuzda ne varsa girintili.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.