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
Author: Legend, 2011-02-27

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
 416
Author: Legend,
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.

 127
Author: DavidPhillipOster,
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
 35
Author: Bob Enohp,
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
 28
Author: Bruno Bronosky,
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
 18
Author: user3276552,
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
 7
Author: Michal Przybylowicz,
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.)

 4
Author: d.raev,
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.

 3
Author: Dirk Duschinger,
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

 3
Author: tristobal,
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).

 0
Author: DFeng,
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