Jak mogę przesłać dane wyjściowe polecenia do mojego schowka i wkleić je z powrotem podczas korzystania z terminala? Na przykład:
cat file | clipboard
apt install xclip
icat file | xclip -sel clip
Jak mogę przesłać dane wyjściowe polecenia do mojego schowka i wkleić je z powrotem podczas korzystania z terminala? Na przykład:
cat file | clipboard
apt install xclip
icat file | xclip -sel clip
Odpowiedzi:
Zawsze chciałem to zrobić i znalazłem przyjemny i łatwy sposób. Zapisałem całą procedurę na wypadek, gdyby ktokolwiek jej potrzebował.
Najpierw zainstaluj program 16 kB o nazwie xclip
:
sudo apt-get install xclip
Następnie możesz xclip
przesłać dane wyjściowe do skopiowania do schowka:
cat file | xclip
Aby wkleić właśnie skopiowany tekst, użyj:
xclip -o
Aby uprościć życie, możesz ustawić alias w pliku .bashrc tak jak ja:
alias "c=xclip"
alias "v=xclip -o"
Aby zobaczyć, jak to jest użyteczne, wyobraź sobie, że chcę otworzyć moją bieżącą ścieżkę w nowym oknie terminala ( w niektórych systemach mogą istnieć inne sposoby, takie jak Ctrl+ T, ale to tylko w celach ilustracyjnych):
Terminal 1:
pwd | c
Terminal 2:
cd `v`
Zwróć uwagę na ` `
okolicę v
. Wykonuje się v
to najpierw jako polecenie, a następnie zastępuje je w miejscu cd
do użycia.
Kopiuj tylko zawartość do X
schowka
cat file | xclip
Jeśli chcesz wkleić w innym miejscu niż X
aplikacja, spróbuj tego:
cat file | xclip -selection clipboard
alias "cs=xclip -selection clipboard"
i alias "vs=xclip -o -selection clipboard"
ułatwiaj kopiowanie / wklejanie ze schowka systemowego
W systemie OS X użyj pbcopy
; pbpaste
idzie w przeciwnym kierunku.
pbcopy < .ssh/id_rsa.pub
pbcopy < .ssh/id_rsa.pub
pbcopy < git merge-base master some-branch
git merge-base master some-branch | pbcopy
Stworzyłem narzędzie dla Linux / OSX / Cygwin, które jest podobne do niektórych z tych innych, ale nieco unikalne. Nazywam to cb
i można go znaleźć w tym githubie .
W tym zestawieniu pokazuję, jak kopiować i wklejać za pomocą wiersza poleceń, używając Linuksa, macOS i Cygwin.
_copy(){
cat | xclip -selection clipboard
}
_paste(){
xclip -selection clipboard -o
}
_copy(){
cat | pbcopy
}
_paste(){
pbpaste
}
_copy(){
cat > /dev/clipboard
}
_paste(){
cat /dev/clipboard
}
Uwaga: pierwotnie chciałem tylko wspomnieć o tym w moim komentarzu do odpowiedzi Boba Enohpa . Ale potem zdałem sobie sprawę, że powinienem dodać README do mojej treści. Ponieważ edytor treści nie oferuje podglądu Markdown, użyłem tutaj pola odpowiedzi i po skopiowaniu / wklejeniu go do mojej myśli pomyślałem: „Równie dobrze mogę przesłać odpowiedź”.
Ten skrypt jest wzorowany na tee
(patrz man tee
).
To jak normalne polecenia kopiowania i wklejania, ale ujednolicone i zdolne do wyczuwania, kiedy chcesz, aby było łańcuchowe
$ 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
(chronologicznie sensowne było pokazanie tego na końcu)
# 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
Napisałem ten mały skrypt, który eliminuje zgadywanie z poleceń kopiowania / wklejania.
Wersja skryptu dla systemu Linux polega na tym, że xclip jest już zainstalowany w twoim systemie. Skrypt nazywa się schowkiem.
#!/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
Wersja skryptu dla OS X opiera się na pbcopy i pbpaste, które są preinstalowane na wszystkich komputerach 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
Korzystanie ze skryptu jest bardzo proste, ponieważ po prostu podłączasz lub wyjmujesz, clipboard
jak pokazano w tych dwóch przykładach.
$ cat file | clipboard
$ clipboard | less
pbcopy
i pbpaste
w systemie Linux, więc działa zarówno w systemie Linux, jak i OS X.
~/.scripts/clipboard
* Ustaw, aby był wykonywalny chmod +x ~/.scripts/clipboard
dla bash: * dodaj export PATH=$PATH:~/.scripts
na końcu ~/.bashrc
dla fish: * dodaj set PATH ~/.scripts $PATH
do ~/.config/fish/fish.config
Jeśli któryś z plików lub folderów jeszcze nie istnieje, po prostu je utwórz.
clipboard(){ ... }
i wkleić go do .bashrc
date | cb | tee -a updates.log
. To wysłałoby dane date
wyjściowe polecenia do schowka i przekazało je do tee -a
polecenia, które dołącza je do pliku i przekazuje dalej stdout
. Ale to jest jak „ szczelny trójnik do schowka”, ponieważ jeśli po prostu nie date | cb
dostaniesz żadnego wyjścia. I wreszcie robi to również cb > file.txt
gist.github.com/RichardBronosky/...
xclip -i -selection clipboard
naxargs echo -n | xclip -i -selection clipboard
Dodaj to do ~/.bashrc
:
# Now `cclip' copies and `clipp' pastes'
alias cclip='xclip -selection clipboard'
alias clipp='xclip -selection clipboard -o'
Teraz clip p pasty i c klip kopii - ale można to zrobić również bardziej wyszukane rzeczy:
clipp | sed 's/^/ /' | cclip
↑ wcina twój schowek; dobre dla witryn bez { }przycisku przepełnienia stosu
Możesz go dodać, uruchamiając to:
printf "\nalias clipp=\'xclip -selection c -o\'\n" >> ~/.bashrc
printf "\nalias cclip=\'xclip -selection c -i\'\n" >> ~/.bashrc
Używam Parcellite i xsel
aby skopiować ostatnią wiadomość zatwierdzenia z git
mojego menedżera schowka (z jakiegoś powodu xclip
nie działa):
$ git log -1 --pretty=%B | xsel -i -b
Bez korzystania z zewnętrznych narzędzi, jeśli łączysz się z widokiem serwera SSH, jest to stosunkowo łatwe polecenie:
Z wiersza polecenia systemu Windows 7+:
ssh user@server cat /etc/passwd | clip
Spowoduje to umieszczenie zawartości pliku zdalnego w lokalnym schowku.
(Polecenie wymaga uruchomienia programu Pageant dla klucza lub poprosi o podanie hasła.)
Zrobiłem małe narzędzie zapewniające podobną funkcjonalność, bez użycia xclip ani xsel. stdout
jest kopiowany do schowka i można go ponownie wkleić w terminalu. Widzieć:
https://sourceforge.net/projects/commandlinecopypaste/
Pamiętaj, że to narzędzie nie wymaga sesji X. Ze schowka można korzystać tylko w terminalu i nie trzeba go wklejać Ctrl+Vani klikać środkowym przyciskiem myszy w inne okna X.
Na podstawie poprzednich postów skończyłem z następującym lekkim aliasem, który można dodać do .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
Przykłady:
# 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
Pochodzę z tłem okrojona KDE i nie mają dostępu do xclip
, xsel
lub innych wymyślnych rzeczy. Mam konsolę TCSH, co gorsza.
Przybory: qdbus
klipper
xargs
bash
Utwórz plik wykonywalny bash foo.sh
.
#!/bin/bash
qdbus org.kde.klipper /klipper setClipboardContents "$1" > /dev/null
Uwaga: To musi być bash, ponieważ TCSH nie obsługuje argumentów wieloliniowych.
Po nim następuje alias TCSH w .cshrc
.
alias clipboard xargs -0 /path/to/foo
Wyjaśnienie:
xargs -0
potoki stdin w jeden argument. Argument ten jest przekazywany do pliku wykonywalnego bash który wysyła „Kopiuj do schowka” wniosek do klipper
korzystania qdbus
. Potok do /dev/null
nie ma drukować znaku nowej linii zwracanego przez qdbus
konsolę.
Przykładowe użycie:
ls | clipboard
Spowoduje to skopiowanie zawartości bieżącego folderu do schowka.
Uwaga: działa tylko jako potok. Jeśli chcesz skopiować argument, użyj bezpośrednio pliku wykonywalnego bash .
Zazwyczaj uruchamiam to polecenie, gdy muszę skopiować moje ssh-key
:
cat ~/.ssh/id_rsa.pub | pbcopy
ctrl+v
gdziekolwiek indziej.
na Wayland xcopy nie działa, zamiast tego użyj schowka wl . np. na fedorze
sudo dnf install wl-clipboard
tree | wl-copy
wl-paste > file
Dla tych, którzy używają bash zainstalowanego w systemie Windows (znanym jako Windows Subsystem for Linux (WSL)), próba xclip spowoduje błąd:
Error: Can't open display: (null)
Zamiast tego przypomnij sobie, że podsystem linux ma dostęp do plików wykonywalnych systemu Windows. Możliwe jest użycie clip.exe jak
echo hello | clip.exe
co pozwala na użycie polecenia wklej (ctrl-v).
Wystarczy zakryć przypadek krawędzi :) i ponieważ tytuł pytania pyta (przynajmniej teraz), jak skopiować dane wyjściowe polecenia bezpośrednio do schowka.
Często uważam, że przydatne jest skopiowanie danych wyjściowych polecenia po jego wykonaniu i nie chcę lub nie mogę wykonać polecenia ponownie.
W tym scenariuszu możemy użyć gdm lub podobnego narzędzia myszy i wybrać za pomocą myszy. apt-get install gdm
a następnie kliknięcie prawym przyciskiem myszy lub kombinacje Cntrl + Shift + c oraz Cntrl + Shift + v do skopiowania i wklejenia w terminalu
Lub, co jest dla mnie preferowaną metodą (ponieważ mysz nie może prawidłowo wybrać w jednym okienku, gdy masz wiele okien obok siebie i musisz wybrać więcej niż jedną linię), używając tmux możemy skopiować do bufora tmux przy użyciu standardowego [, spacja, przejdź do wyboru, wprowadź lub możesz wybrać blok kodu. Jest to również szczególnie przydatne, gdy znajdujesz się na jednym z pasów multipleksera cli, np. Tmux ORAZ musisz wybrać wiązkę tekstu, ale nie numery linii (moja konfiguracja vima wyświetla numery linii)
Następnie możesz użyć polecenia:
bufor zapisu tmux - | xclip -i
Możesz oczywiście aliasować to, co lubisz lub wiązać bezpośrednio w pliku konfiguracyjnym tmux
Ma to na celu dać ci konceptualną odpowiedź na ten przypadek krawędzi, gdy ponowne wykonanie polecenia nie jest możliwe. Jeśli potrzebujesz bardziej szczegółowych przykładów kodu, daj mi znać
Twoje zdrowie