Bir komutun çıkışını panoya nasıl ekleyebilir ve bir terminal kullanırken nasıl yapıştırabilirim? Örneğin:
cat file | clipboard
apt install xclip
vecat file | xclip -sel clip
Bir komutun çıkışını panoya nasıl ekleyebilir ve bir terminal kullanırken nasıl yapıştırabilirim? Örneğin:
cat file | clipboard
apt install xclip
vecat file | xclip -sel clip
Yanıtlar:
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ı xclip
panoya 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 cd
kullanmak için yerine geçer.
Yalnızca içeriği X
panoya kopyala
cat file | xclip
X
Uygulama dışında başka bir yere yapıştırmak istiyorsanız , şunu deneyin:
cat file | xclip -selection clipboard
alias "cs=xclip -selection clipboard"
ve alias "vs=xclip -o -selection clipboard"
kolaylaştırmak için
OS X'te şunu kullanın pbcopy
: pbpaste
ters yöne gider.
pbcopy < .ssh/id_rsa.pub
pbcopy < .ssh/id_rsa.pub
pbcopy < git merge-base master some-branch
git merge-base master some-branch | pbcopy
Linux / OSX / Cygwin için bunlardan bazılarına benzer ama biraz benzersiz bir araç oluşturdum. Ben diyorum cb
ve 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.
_copy(){
cat | xclip -selection clipboard
}
_paste(){
xclip -selection clipboard -o
}
_copy(){
cat | pbcopy
}
_paste(){
pbpaste
}
_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."
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
$ 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
(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
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ü clipboard
bu iki örnekte gösterildiği gibi içeri veya dışarı boru bağlarsınız.
$ cat file | clipboard
$ clipboard | less
pbcopy
ve pbpaste
Linux üzerinde kullanıyorum, bu yüzden hem Linux hem de OS X için çalışıyor.
~/.scripts/clipboard
* Çalıştırılabilir yapın chmod +x ~/.scripts/clipboard
partisi yüzünden: * eklenti export PATH=$PATH:~/.scripts
sonuna ~/.bashrc
balık için: * eklenti set PATH ~/.scripts $PATH
için ~/.config/fish/fish.config
dosya veya klasörlerin herhangi sadece bunları oluşturmak bulunmamakta zaten yoksa.
clipboard(){ ... }
ve .bashrc'ye yapıştırabilirsiniz
date | cb | tee -a updates.log
. Bu, date
komut çıktısını panoya gönderir ve tee -a
bir 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/…
xclip -i -selection clipboard
içinxargs echo -n | xclip -i -selection clipboard
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
Parcellite kullanıyorum ve pano yöneticime xsel
son taahhüt mesajı kopyalamak git
için (bazı nedenlerden dolayı xclip
çalışmıyor):
$ git log -1 --pretty=%B | xsel -i -b
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.)
Xclip veya xsel kullanmadan benzer işlevsellik sağlayan küçük bir araç yaptım. stdout
bir 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.
Ö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
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 -0
stdin'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 klipper
kullanarak qdbus
. Yöneltilecek yöneltme , konsola /dev/null
dö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 .
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.
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
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.
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 gdm
ve 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