Bir komutun çıktısını doğrudan panoya nasıl kopyalayabilirim?


528

Bir komutun çıkışını panoya nasıl ekleyebilir ve bir terminal kullanırken nasıl yapıştırabilirim? Örneğin:

cat file | clipboard



Windows'ta Git Bash'tan Ubuntu'ya giriş yaparken xclip'i çalıştıramadığım için ilgili bir soru sordum: stackoverflow.com/q/60117294/470749
Ryan

1
Dosya içeriğini klibi panosuna kaydedin. apt install xclipvecat file | xclip -sel clip
EsmaeelE

Yanıtlar:


597

Her zaman bunu yapmak istedim ve bunu yapmanın güzel ve kolay bir yolunu buldum. Başka birinin ihtiyacı olması durumunda tam prosedürü yazdım.

İlk olarak 16 kB'lik bir program yükleyin xclip:

sudo apt-get install xclip

Daha sonra çıktıyı xclippanoya kopyalanmak üzere bağlayabilirsiniz:

cat file | xclip

Kopyaladığınız metni yapıştırmak için şunu kullanmalısınız:

xclip -o

Hayatı kolaylaştırmak için .bashrc dosyanızda yaptığım gibi bir takma ad oluşturabilirsiniz:

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

Bunun ne kadar yararlı olduğunu görmek için, mevcut yolumu yeni bir terminal penceresinde açmak istediğimi düşünün ( bazı sistemlerde Ctrl+ gibi yapmanın başka yolları olabilir T, ancak bu sadece örnekleme amaçlıdır):

Terminal 1:
pwd | c

Terminal 2:
cd `v`

` ` Etrafına dikkat edin v. Bu v, önce bir komut olarak yürütülür ve daha sonra onu cdkullanmak için yerine geçer.

Yalnızca içeriği Xpanoya kopyala

cat file | xclip

XUygulama dışında başka bir yere yapıştırmak istiyorsanız , şunu deneyin:

cat file | xclip -selection clipboard

144
"cat file | xclip" yalnızca içeriği 'X' panosuna kopyalar, eğer 'X' uygulamasından başka bir yere yapıştırmak isterseniz, şunu deneyin: "cat file | xclip -selection clipboard"
khotyn

5
Kulp seçiminiz uygun!
Matt Joiner

4
Doğrudan "pwd | c" sonucunu yapıştırabilmeniz ve düzenleyebilmeniz için satırsonu karakterini kaldırmak istiyorsanız, "pwd | tr -d '\ n' | xclip -selection c"
Anake

12
Ayrıca sistem panosundan kopyalama / yapıştırma işlemlerini daha kolay tanımlamak alias "cs=xclip -selection clipboard"ve alias "vs=xclip -o -selection clipboard"kolaylaştırmak için
Yibo Yang

1
Sudo erişimi olmayan ve xclip'in yüklü olmadığı bir çözüm ne olacak?
DanGordon

179

OS X'te şunu kullanın pbcopy: pbpasteters yöne gider.

pbcopy < .ssh/id_rsa.pub

14
Yups! Tıpkı eski gibi:pbcopy < .ssh/id_rsa.pub
doublejosh

komut çıkışı için çalışmıyor - örneğinpbcopy < git merge-base master some-branch
Ben

tmux kullanıyorsanız, oturumunuzu yeniden
bağlamadığınız

1
zaten üzerinde çalışıyorsanız, cat kullanabilirsiniz: cat file.txt | pbcopy
rtrigoso

3
Yorumun 5 yaşında olduğunu biliyorum, ancak gelecekte birisinin buna tökezlemesi durumunda, komut çıktısıyla kullanmak için yapıngit merge-base master some-branch | pbcopy
Sam

62

Linux / OSX / Cygwin için bunlardan bazılarına benzer ama biraz benzersiz bir araç oluşturdum. Ben diyorum cbve bu github özünde bulunabilir .

Bu özette Linux, macOS ve Cygwin kullanarak komut satırı üzerinden nasıl kopyalayıp yapıştıracağımı göstereceğim.

Linux

_copy(){
    cat | xclip -selection clipboard
}

_paste(){
    xclip -selection clipboard -o
}

Mac os işletim sistemi

_copy(){
    cat | pbcopy
}

_paste(){
    pbpaste
}

Cygwin

_copy(){
    cat > /dev/clipboard
}

_paste(){
    cat /dev/clipboard
}

Not: Aslında Bob Enohp'un cevabına yaptığım yorumda bundan bahsetmek istedim . Ama sonra gistime bir README eklemem gerektiğini fark ettim. Gist editörü bir Markdown önizlemesi sunmadığından, cevap kutusunu burada kullandım ve kopyaladıktan / özgeçmiş düşünceme yapıştırdıktan sonra, "Cevabı da gönderebilirim."

cb

Panoya sızdırmaz bir tişört

Bu komut dosyasının ardından modellenmiştir tee(bkz.man tee ).

Normal kopyalama ve yapıştırma komutlarınız gibidir, ancak birleştirilebilir ve ne zaman zincirlenebilir olmasını istediğinizi algılayabilirsiniz

Örnekler

kopya

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

Yapıştırmak

# 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

zincirleme

$ 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

Dosya yönlendirmesi ile kopyala

(kronolojik olarak bunu sonunda demo yapmak mantıklıydı)

# 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

Bu macOS terminalde panoya bir komut çıkışı kopyalamak için mükemmel çalıştı, teşekkürler!
Joshua Dyck

46

Tahmin çalışmasını kopyala / yapıştır komutlarından alan bu küçük komut dosyasını yazdım.

Betiğin Linux sürümü, sisteminizde zaten yüklü olan xclip'e dayanır. Komut dosyasına pano denir.

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

Komut dosyasının OS X sürümü, tüm Mac'lerde önceden yüklenmiş olan pbcopy ve pbpaste'ye dayanır.

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

Betiği kullanmak çok basittir, çünkü clipboardbu iki örnekte gösterildiği gibi içeri veya dışarı boru bağlarsınız.

$ cat file | clipboard

$ clipboard | less

3
İsimleri pbcopyve pbpasteLinux üzerinde kullanıyorum, bu yüzden hem Linux hem de OS X için çalışıyor.
StackedCrooked

Ubuntu içinde global olarak komut çalışması için: * Kaydet en ~/.scripts/clipboard * Çalıştırılabilir yapın chmod +x ~/.scripts/clipboard partisi yüzünden: * eklenti export PATH=$PATH:~/.scriptssonuna ~/.bashrc balık için: * eklenti set PATH ~/.scripts $PATHiçin ~/.config/fish/fish.config dosya veya klasörlerin herhangi sadece bunları oluşturmak bulunmamakta zaten yoksa.
Hokey

2
Ayrıca bu komut dosyasını bir işlev olarak sarabilir clipboard(){ ... }ve .bashrc'ye yapıştırabilirsiniz
Sebastian Nowak

Bu yaptığımla çok benzer, ama zincirleme gibi izin veriyorum date | cb | tee -a updates.log. Bu, datekomut çıktısını panoya gönderir ve tee -abir dosyaya ekleyen ve ona ileten komuta iletir stdout. Ama bu " panoya sızdırmaz bir tişört" gibi çünkü sadece yaparsanız date | cbçıktı almazsınız. Ve son olarak da cb > file.txt gist.github.com/RichardBronosky/…
Bruno Bronosky

Bir öneri - yapıştırma sırasında komutu yürütmekten kaçınmak için (örneğin bir yolu kopyalayıp yapıştırarak) izleyen satırsonu karakterini soyun. Ben komutunu değiştirerek bunu xclip -i -selection clipboardiçinxargs echo -n | xclip -i -selection clipboard
Ivaylo Strandjev

23

Bunu şu adrese ekleyin ~/.bashrc:

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

Şimdi p pastaları ve c klip kopyaları - ancak daha meraklı şeyler de yapabilirsiniz:

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

Clipboard panoya girintiler; yığın taşması { }düğmesi olmayan siteler için iyi

Bunu çalıştırarak ekleyebilirsiniz:

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

Lütfen bir kullanım örneği verin
Ulf Aslak

7

Parcellite kullanıyorum ve pano yöneticime xselson taahhüt mesajı kopyalamak gitiçin (bazı nedenlerden dolayı xclipçalışmıyor):

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

7

Harici araçlar kullanmadan, sunucu görünümü SSH'sine bağlanıyorsanız, bu nispeten kolay bir komuttur:

Windows 7+ komut isteminden:

ssh user@server cat /etc/passwd | clip

Bu, uzak dosyanın içeriğini yerel panonuza koyacaktır.

(Komut anahtar için Pageant'ı çalıştırmayı gerektirir veya sizden bir parola ister.)


1
@AfshinMoazami, başlık ve sorunun kendisi genel, Sadece unix sistemi için etiketler ipucu ve cevabım, bir unix sunucusundan bir Windows makinesine tarihi almaya çalıştığınızda, gelecekteki okuyucular olabilir.
d.raev

1
Evet, çünkü sadece yerel olarak oynamak için Powershell'e sahip Windows yöneticileri için yararlı (şimdi LSW gerçekten işlevsel olsa da, doğrudan Powershell'den bash'a düşebilir ve oradan * nixy şeylerimi yapabilirim).
17'de flört

Onun DOS istemi yanı sıra Windows 10 üzerinde git bash üzerinde çalışma yaniecho Hello World | clip

5

Mac için bu komut satırını kullanarak (panoya) yapıştırma (panoya) kopyalamanın örnek bir yoludur

pwdKomutun sonucunu panoya kopyala

$ pwd | pbcopy

Panodaki içeriği şu şekilde kullanın:

$ cd $(pbpaste)

3

Xclip veya xsel kullanmadan benzer işlevsellik sağlayan küçük bir araç yaptım. stdoutbir panoya kopyalanır ve terminale tekrar yapıştırılabilir. Görmek:

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

Bu aracın X oturumu gerektirmediğini unutmayın. Pano sadece terminal içinde kullanılabilir ve Ctrl+Vdiğer X pencerelerine yapıştırılmamalı veya farenin orta tuşuna tıklanmamalıdır.



2

Önceki gönderilere dayanarak, aşağıdakilere eklenebilecek aşağıdaki hafif ağırlıklı takma ad çözümüyle sonuçlandım .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

Örnekler:

# 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

Soyulmuş bir KDE arka planından geliyorum ve erişimim yok xclip,xsel ya da diğer fantezi şeyler. İşleri daha da kötüleştirecek bir TCSH Konsole'm var.

Koşullar: qdbus klipper xargs bash

Bir bash yürütülebilir dosyası oluşturun foo.sh.

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

Not: TCSH çok satırlı argümanları desteklemediğinden bunun bash olması gerekir.

Ardından bir TCSH takma adı .cshrc.

alias clipboard xargs -0 /path/to/foo

Açıklama:

xargs -0stdin'i tek bir argümana dönüştürüyor. Bu argüman isteği "panoya kopya" bir gönderir bash yürütülebilir geçirilir klipperkullanarak qdbus. Yöneltilecek yöneltme , konsola /dev/nulldöndürülen yeni satır karakterini yazdırmamaktır qdbus.

Örnek Kullanım:

ls | clipboard

Bu, geçerli klasörün içeriğini panoya kopyalar.

Not: Sadece boru olarak çalışır. Bir argümanı kopyalamanız gerekiyorsa doğrudan bash yürütülebilir dosyasını kullanın .


1

Ben genellikle benim kopyalamak zorunda olduğunda bu komutu çalıştırın ssh-key:

cat ~/.ssh/id_rsa.pub | pbcopy

ctrl+v başka herhangi bir yer.


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

Windows sistemlerinde (Linux için Windows Alt Sistemi (WSL) olarak bilinir) yüklü bash kullanan kullanıcılar için xclip'i denemek bir hata verecektir:

Error: Can't open display: (null)

Bunun yerine, linux alt sisteminin Windows yürütülebilir dosyalarına erişimi olduğunu hatırlayın. Clip.exe gibi kullanmak mümkündür

echo hello | clip.exe

Yapıştır komutunu (ctrl-v) kullanmanızı sağlar.


1
Windows'ta bir xserver (vcxsvr veya xming gibi) yüklüyse, bir ekranın açıldığını ve xclipboard'un çalıştığını, xclip'i görünüşte kullanabileceğinizi unutmayın.
bitbyte

0

Sadece bir kenar vakasını kapatmak için :) ve soru başlığı (en azından şimdi) bir komutun çıktısının doğrudan panoya nasıl kopyalanacağını sorar.

Çoğu zaman, komutun çıktısını zaten yürütüldükten sonra kopyalamayı yararlı buluyorum ve komutu tekrar yürütmek istemiyorum veya yapamıyorum.

Bu senaryo için, gdm veya benzer bir fare yardımcı programını kullanabilir ve fareyi kullanarak seçim yapabiliriz. apt-get install gdmve sonra terminalde kopyalayıp yapıştırmak için sağ tıklama veya Cntrl + Shift + c ve Cntrl + Shift + v kombinasyonları

Ya da benim için tercih edilen yöntemdir (fare yan yana birden fazla bölmeniz olduğunda ve bir satırdan fazlasını seçmeniz gerektiğinde fare bir bölmenin içinden düzgün bir şekilde seçemediğinden), tmux kullanarak tmux buffer'ı standart kullanarak kopyalayabiliriz [, boşluk, seçmek için taşıyın, girin veya bir kod bloğu seçebilirsiniz. Ayrıca, tmux gibi cli çoklayıcısının şeritlerinden birinde olduğunuzda özellikle kullanışlıdır VE satır numaralarını değil, bir grup metin seçmeniz gerekir (vim kurulumum satır numaralarını oluşturur)

Bundan sonra komutu kullanabilirsiniz:

tmux kaydetme tamponu - | xclip -i

Elbette beğendiğiniz bir şeyi diğer adınıza takabilir veya doğrudan tmux yapılandırma dosyasında bağlayabilirsiniz.

Bu sadece komutu tekrar yürütmek mümkün olmadığında bu uç durumu ele almanız için kavramsal bir cevap vermek içindir. Daha spesifik kod örneklerine ihtiyacınız varsa, bize bildirin

Şerefe

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.