Jak skopiować wyjście polecenia bezpośrednio do schowka?
Jak mogę przekierować wyjście polecenia do schowka i wkleić je z powrotem podczas korzystania z terminala? Na przykład:
cat file | clipboard
10 answers
Zawsze chciałem to zrobić i znalazłem miły i łatwy sposób na to. Spisałem całą procedurę na wypadek, gdyby ktoś jeszcze jej potrzebował.
Najpierw zainstaluj 16 kB program o nazwie xclip
:
sudo apt-get install xclip
Możesz następnie przekierować wyjście do xclip
, aby zostało skopiowane do schowka:
cat file | xclip
Aby wkleić skopiowany tekst, należy użyć:
xclip -o
Aby uprościć życie, możesz skonfigurować alias w swoim .plik bashrc tak jak ja:
alias "c=xclip"
alias "v=xclip -o"
Aby zobaczyć jak przydatne jest to, wyobraź sobie, że chcę otworzyć moją bieżącą ścieżkę w nowym oknie terminala (mogą być inne sposoby, jak Ctrl+T na niektórych systemach, ale to tylko dla celów ilustracyjnych):
Terminal 1:
pwd | c
Terminal 2:
cd `v`
Zwróć uwagę na ` `
wokół v
. To polecenie wykonuje v
jako polecenie, a następnie zastępuje je w miejscu cd
do użycia.
Skopiuj tylko zawartość do schowka X
cat file | xclip
Jeśli chcesz wkleić gdzieś indziej niż X
aplikacja, spróbuj tego:
cat file | xclip -selection clipboard
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-12 21:30:58
Na OS X, użyj pbcopy
; pbpaste
idzie w przeciwnym kierunku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-09 11:39:31
Napisałem mały skrypt, który bierze zgadywanie pracy z poleceń Kopiuj / Wklej.
Wersja Linuksa skryptu polega na tym, że xclip jest już zainstalowany w Twoim systemie. Skrypt nazywa się Schowek.
#!/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 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 wchodzisz lub wychodzisz z clipboard
, Jak pokazano w tych dwóch przykładach.
$ cat file | clipboard
$ clipboard | less
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-12 21:32:45
Stworzyłem narzędzie dla Linuksa/OSX/Cygwina, które jest podobne do niektórych z tych innych, ale nieco unikalne. Nazywam go cb
i można go znaleźć w tym github gist .
W tym gist demonstruję jak kopiować i wklejać za pomocą linii poleceń używając Linuksa, macOS i Cygwina.
Linux
_copy(){
cat | xclip -selection clipboard
}
_paste(){
xclip -selection clipboard -o
}
MacOS
_copy(){
cat | pbcopy
}
_paste(){
pbpaste
}
Cygwin
_copy(){
cat > /dev/clipboard
}
_paste(){
cat /dev/clipboard
}
Uwaga: pierwotnie chciałem o tym wspomnieć w komentarzu do odpowiedzi Boba Enohpa. Ale wtedy ja zdałem sobie sprawę, że powinienem dodać README do mojego Sedna. Ponieważ edytor gist nie oferuje podglądu Markdown, użyłem tutaj pola odpowiedzi i po skopiowaniu / wklejeniu go do mojego GIST pomyślałem: "równie dobrze mogę przesłać odpowiedź."
Cb
Szczelna koszulka do schowka
Ten skrypt jest wzorowany na tee
(Zobacz man tee
).
Jest to jak zwykłe polecenia Kopiuj i wklej, ale ujednolicone i zdolne do wyczucia, kiedy chcesz, aby to było chainable
Przykłady
Kopia
$ date | cb
# clipboard contains: Tue Jan 24 23:00:00 EST 2017
Wklej
# 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
Łańcuchowanie
$ 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
Kopiowanie poprzez przekierowanie pliku
(chronologicznie miało to sens, aby demo to 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-07 18:26:40
Dodaj to do swojego ~/.bashrc
:
# Now `cclip' copies and `clipp' pastes'
alias cclip='xclip -selection clipboard'
alias clipp='xclip -selection clipboard -o'
Teraz clip p pasty i c kopie klipów - ale można też robić bardziej fantazyjne rzeczy:
clipp | sed 's/^/ /' | cclip
↑ wcięcia schowka; dobre dla stron bez przepełnienia stosu { } button
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-12 21:39:29
Używam Parcellite i xsel
Aby skopiować ostatnią wiadomość z git
do mojego menedżera schowka (z jakiegoś powodu xclip
nie działa):
$ git log -1 --pretty=%B | xsel -i -b
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-14 13:38:07
Bez użycia zewnętrznych narzędzi, jeśli łączysz się z widokiem serwera SSH, jest to stosunkowo łatwe polecenie:
Z wiersza polecenia Windows 7+:
ssh user@server cat /etc/passwd | clip
Spowoduje umieszczenie zawartości zdalnego pliku w lokalnym schowku.
(polecenie wymaga uruchomienia klucza, lub zapyta Cię o hasło.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-12 21:38:20
Zrobiłem małe narzędzie o podobnej funkcjonalności, bez używania xclip lub xsel. stdout
jest kopiowany do schowka i może być wklejony ponownie w terminalu. Zobacz:
Https://sourceforge.net/projects/commandlinecopypaste/
Zauważ, że to narzędzie nie potrzebuje sesji X. Schowek może być używany w terminalu i nie musi być Wklejany przez Ctrl+V lub środkowe kliknięcie myszką w inne X-okna.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-11 20:49:04
W Linuksie z zainstalowanym xclip:
Xclip-zaznaczenie schowka
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-28 19:59:37
Dla osób używających bash zainstalowanych 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 windows. Możliwe jest użycie klipu.exe like
echo hello | clip.exe
Który pozwala na użycie polecenia Wklej (ctrl-v).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-30 00:15:24