Przełącz do / ze Schowka w skrypcie Bash

Czy jest możliwe podłączenie do / ze Schowka w Bash?

Czy jest to Orurowanie do / z uchwytu urządzenia lub za pomocą aplikacji pomocniczej, nie mogę znaleźć nic.

Na przykład, jeśli {[1] } było urządzeniem łączącym się ze schowkiem, możemy to zrobić:

cat /dev/clip        # Dump the contents of the clipboard
cat foo > /dev/clip  # Dump the contents of "foo" into the clipboard
Author: jww, 2009-04-15

23 answers

Jesteś trochę niejednoznaczna. Pewnie jesteś użytkownikiem Linuksa wewnątrz X, który chce umieścić rzeczy w schowku x PRIMARY.

Ważne jest, aby zrozumieć, że bash nie ma schowka. Nie ma czegoś takiego jak "Schowek", ponieważ bash może działać na Windows, Mac OS X, wielu innych systemach operacyjnych, wewnątrz X, Na Zewnątrz X, ... Nie wspominając o tym, że sam X ma trzy różne schowki. Możesz mieć do czynienia z wieloma schowkami. Zwykle schowek, który chcesz to talk to narzędzie, które pozwala Ci z nim rozmawiać.

W przypadku X, tak, jest xclip (i inne). xclip -selection c wyśle dane do schowka, który współpracuje z Ctrl-C, Ctrl-V w większości aplikacji.

Jeśli próbujesz rozmawiać ze schowkiem Mac OS X, jest pbcopy.

Jeśli jesteś w trybie terminala Linuksa (bez X), to może powinieneś zajrzeć do gpm.

Jest też GNU screen który ma Schowek. Aby umieścić tam rzeczy, spójrz na polecenie screen "readreg".

W systemie Windows / cygwin użyj /dev/clipboard lub clip dla nowszych wersji systemu Windows (co najmniej Windows 10).

 680
Author: lhunath,
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-01-30 17:07:45

Upewnij się, że używasz aliasu xclip="xclip -selection c" w przeciwnym razie nie możesz po prostu użyć Ctrl+v aby wkleić go z powrotem w inne miejsce.

echo test | xclip    

Ctrl+v === test

 207
Author: doug,
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
2012-11-13 02:25:57

Zainstaluj

# You can install xclip using `apt-get`
apt-get install xclip

# or `pacman`
pacman -S xclip

# or `dnf`
dnf install xclip

Jeśli nie masz dostępu do apt-get ani pacman, ani dnf, źródła są dostępne na sourceforge.

Set-up

Bash

W ~/.bash_aliases, Dodaj:

alias setclip="xclip -selection c"
alias getclip="xclip -selection c -o"

nie zapomnij załadować nowej konfiguracji za pomocą . ~/.bash_aliases lub restartując swój profil.

Ryby

W ~/.config/fish/config.fish, Dodaj:

abbr setclip "xclip -selection c"
abbr getclip "xclip -selection c -o"

nie zapomnij ponownie uruchomić instancji fish, restartując terminal w celu zmiany aplikuj.

Użycie

Możesz teraz używać setclip i getclip, np:

$ echo foo | setclip
$ getclip
foo
 128
Author: tleb,
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-30 13:27:49

W systemie Mac OS X przydatne mogą być następujące narzędzia wiersza poleceń:

Przykład:

cat ~/.bashrc | pbcopy

Po tym poleceniu zawartość pliku ~/.bashrc będzie dostępna do wklejenia za pomocą cmd+v Skrót.

 107
Author: jtruelove,
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-07-18 00:13:01

Try

xclip

xclip - command line interface to X selections (clipboard) 

Man

 33
Author: Zoredache,
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-05-13 00:30:36

Xsel on Debian/Ubuntu / Mint

# append to clipboard:
cat 'the file with content' | xsel -ib

# or type in the happy face :) and ...
echo 'the happy face :) and content' | xsel -ib

# show clipboard
xsel -b

# Get more info:
man xsel

Install

sudo apt-get install xsel
 17
Author: Andrew_1510,
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-08-18 15:14:34

Oto gotowy do użycia skrypt bash do czytania schowka, który działa na wielu platformach. Proszę edytować skrypt tutaj, jeśli dodasz funkcjonalność(np. więcej platform).

#!/bin/bash
# WF 2013-10-04
# multi platform clipboard read access
# supports
#   Mac OS X
#   git shell / Cygwin (Windows)
#   Linux (e.g. Ubuntu)

#
# display an error
#
error() {
  echo "error: $1" 1>&2
  exit 1
}

#
# getClipboard
#
function getClipboard() {
 os=`uname`
      case $os in 
        # git bash  (Windows)
        MINGW32_NT-6.1)
          cat /dev/clipboard;;
        # Mac OS X
        Darwin*)
          pbpaste;;  
        # Linux 
        Linux*)
          # works only for X clipboard - a check that X is running might be due
          xclip -o;;
        *)
          error "unsupported os $os";;
      esac
}

tmp=/tmp/clipboard$$
getClipboard >$tmp
cat $tmp
# comment out for debugging
rm $tmp
 10
Author: Wolfgang Fahl,
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-03-14 16:35:25

W Windows (z Cygwin) spróbuj cat /dev/clipboard LUB echo "foo" > /dev/clipboardJak wspomniano w w tym artykule.

 9
Author: Norman H,
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
2011-05-31 13:33:27

Tylko dla komputerów Mac:

echo "Hello World" | pbcopy
pbpaste

Znajdują się /usr/bin/pbcopy i /usr/bin/pbpaste.

 9
Author: nyitguy,
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-06-07 11:56:14

W Linuksie są różne schowki; serwer X ma jeden, menedżer okien może mieć inny, itd. Nie ma standardowego urządzenia.

Och, tak, w CLI, program ekran ma swój własny Schowek, jak również niektóre inne aplikacje, takie jak Emacs i vi .

W X możesz użyć xclip .

Możesz sprawdzić ten wątek dla innych możliwych odpowiedzi: http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html

 8
Author: Sunny Milenov,
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:43:32

Nie mogę uwierzyć, ile jest odpowiedzi na to pytanie. Nie mogę powiedzieć, że próbowałem ich wszystkich, ale próbowałem najlepszych 3 lub 4 i żaden z nich nie działa dla mnie. To, co dla mnie zadziałało, to odpowiedź umieszczona w jednym z komentarzy napisanych przez użytkownika o imieniu doug. Ponieważ okazało się to tak pomocne, postanowiłem powtórzyć w odpowiedzi.

Zainstaluj narzędzie xcopy i gdy jesteś w Terminalu, wprowadź:

Kopia

Thing_you_want_to_copy|xclip -selection c

Wklej

myvariable=$(xclip -selection clipboard -o)

Zauważyłem wiele odpowiedzi zalecane pbpaste i pbcopy. Jeśli interesują Cię te narzędzia, ale z jakiegoś powodu nie są one dostępne w repo, zawsze możesz utworzyć alias dla poleceń xcopy i nazwać je pbpaste i pbcopy.

alias pbcopy="xclip -selection c" 
alias pbpaste="xclip -selection clipboard -o" 

Więc wtedy wyglądałoby to tak:

Thing_you_want_to_copy|pbcopy
myvariable=$(pbpaste)
 7
Author: thebunnyrules,
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-12-11 06:20:05

Skopiuj i wklej do schowka w Windows (Cygwin):

Zobacz:

$ clip.exe -?

CLIP Opis: Przekierowuje wyjście narzędzi wiersza poleceń do schowka Windows. Ten tekst wyjściowy można następnie wkleić do innych programów. Lista Parametrów: /? Wyświetla ten komunikat pomocy. Przykłady: DIR / CLIP umieszcza kopię bieżącego katalogu wpisanie do schowka Windows. CLIP

Istnieje również getclip (może być używany zamiast shift+ins!), putclip (echo oaeuoa | putclip.exe aby umieścić go w klipie)

 5
Author: Stenemo,
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-06-21 05:46:14

W podsystemie Windows dla Linuksa można skopiować do schowka za pomocą programu clip.exe.

cat file | clip.exe

Pamiętaj, aby użyć polecenia | pipe. I nie polecenie >, ponieważ to nie zadziała.

 5
Author: knowledge_is_power,
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-03-28 14:17:41

Jest to prosty skrypt Pythona, który robi dokładnie to, czego potrzebujesz:

#!/usr/bin/python

import sys

# Clipboard storage
clipboard_file = '/tmp/clipboard.tmp'

if(sys.stdin.isatty()): # Should write clipboard contents out to stdout
    with open(clipboard_file, 'r') as c:
        sys.stdout.write(c.read())
elif(sys.stdout.isatty()): # Should save stdin to clipboard
    with open(clipboard_file, 'w') as c:
        c.write(sys.stdin.read())

Zapisz to jako plik wykonywalny gdzieś w ścieżce (zapisałem to na /usr/local/bin/clip. Możesz umieszczać rzeczy, które mają być zapisane w schowku...

echo "Hello World" | clip

I możesz wrzucić to, co masz w schowku do innego programu...

clip | cowsay
 _____________
< Hello World >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Uruchomienie go samo w sobie po prostu wyświetli to, co znajduje się w schowku.

 4
Author: tysweat,
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:44:57
  xsel -b

Robi to dla x11, w większości jest już zainstalowany. Warto zajrzeć na stronę podręcznika XSel.

 2
Author: Martin Fischer,
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-06-11 21:04:26

Jeśli jesteś taki jak ja i działasz na serwerze linuksowym bez uprawnień roota i nie ma xclip ani gpm możesz obejść ten problem używając tylko pliku tymczasowego. Na przykład:

$ echo "hello world" > ~/clip
$ echo `cat ~/clip`
hello world
 2
Author: horta,
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-09-17 17:48:49

Kilka programów Dla Windows, które napisałem lata temu. Pozwalają na zrzut, push, dołączanie i drukowanie schowka. Działa tak:

dumpclip | perl -pe "s/monkey/chimp/g;" | pushclip

Zawiera kod źródłowy: cmd_clip.zip

 2
Author: jeng,
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:44:10

Jest kilka sposobów. Niektóre ze sposobów, które zostały wymienione obejmują (myślę) tmux, ekran, vim, emacs i powłoki. Nie znam Emacsa ani screena, więc przejrzę pozostałe trzy.

Tmux

Chociaż nie jest to wybór X, tmux ma tryb kopiowania dostępny przez prefix-[ (prefix is Ctrl+B domyślnie). Bufor używany w tym trybie jest oddzielny i wyłączny dla tmux, co otwiera sporo możliwości i czyni go bardziej wszechstronnym niż X wybór w odpowiednich sytuacjach.

Aby wyjść z tego trybu, naciśnij q ; aby nawigować, użyj wiązania vim lub emacs (domyślnie = vim), więc hjkl dla ruchu, v/V/C-v dla wyboru znaków/linii/bloków itp. Gdy masz swój wybór, naciśnij Enter , aby skopiować i wyjść z trybu.

Aby wkleić z tego bufora, użyj prefix-].

Shell

Każda Instalacja X11 wydaje się pochodzić z dwóch programów domyślnie: xclip i xsel (trochę jak to również pochodzi z startx i xinit). Większość innych odpowiedzi wspomina xclip, a ja bardzo lubię xsel za zwięzłość, więc zamierzam omówić xsel.

From xsel(1x):

Opcje wprowadzania

- a, -- append

Dodaje standardowe wejście do zaznaczenia. Implikuje - i .

- f, -- follow

Dołączanie do zaznaczenia, gdy standardowe wejście rośnie. Implikuje - i .

- i, --input

Odczytuje standardowe wejście do wyboru.

Opcje wyjścia

- o, --output

Zapisz wybór na standardowe wyjście.

Opcje działania

-c, --clear

Wyczyść zaznaczenie. Nadpisuje wszystkie opcje wprowadzania.

- d, -- delete

Zażądać usunięcia bieżącego wyboru. To nie tylko czyści zaznaczenie, ale także żąda do programu, w którym znajduje się zaznaczenie, że wybrane treści zostaną usunięte. Nadpisuje wszystkie opcje wprowadzania.

Opcje wyboru

- p, -- primary

Operuj na wyborze głównym (domyślnym).

-s, --wtórny

Operuj na selekcji wtórnej.

- b, --Schowek

Operuj zaznaczeniem schowka.

I to wszystko, co musisz wiedzieć. p (lub nic) dla PRIMARY, s na SECONDARY, b na CLIPBOARD, o na wyjście.

Przykład: powiedzmy, że chcę skopiować wyjście foo Z TTY i wkleić je na stronę internetową, aby zgłosić błąd. Aby to zrobić, idealnie byłoby skopiować do / z sesji TTY / X. Więc pytanie staje się jak uzyskać dostęp do schowka z TTY?

W tym przykładzie zakładamy, że sesja X jest wyświetlana :1.

$ foo -v
Error: not a real TTY
details:
blah blah @ 0x0000000040abeaf4
blah blah @ 0x0000000040abeaf8
blah blah @ 0x0000000040abeafc
blah blah @ 0x0000000040abeb00
...
$ foo -v | DISPLAY=:1 xsel -b # copies it into clipboard of display :1

Wtedy mogę Ctrl-V to do formy jak zwykle.

Teraz powiedz, że ktoś na stronie wsparcia daje mi polecenie, aby Uruchom, aby rozwiązać problem. To skomplikowane i długie.

$ DISPLAY=:1 xsel -bo
sudo foo --update --clear-cache --source-list="http://foo-software.com/repository/foo/debian/ubuntu/xenial/164914519191464/sources.txt"
$ $(DISPLAY=:1 xsel -bo)
Password for braden:
UPDATING %%%%%%%%%%%%%%%%%%%%%%% 100.00%
Clearing cache...
Fetching sources...
Reticulating splines...
Watering trees...
Climbing mountains...
Looking advanced...
Done.
$ foo
Thank you for your order. A pizza should arrive at your house in the next 20 minutes. Your total is $6.99

zamawianie pizzy wydaje się produktywnym wykorzystaniem linii poleceń.

...idziemy dalej.

Vim

If compiled with +clipboard (this is important! Sprawdź swoje vim --version), Vim powinien mieć dostęp do selekcji x PRIMARY i CLIPBOARD. Obie opcje są dostępne odpowiednio z rejestrów * i + i mogą być zapisywane i odczytywane w dowolnym momencie tak samo, jak inne Zarejestruj się. Na przykład:

:%y+    ; copy/yank (y) everything (%) into the CLIPBOARD selection (+)
"+p     ; select (") the CLIPBOARD selection (+) and paste/put it
ggVG"+y ; Alternative version of the first example

Jeśli twoja kopia Vima nie obsługuje bezpośrednio dostępu do selekcji X, to nie koniec świata. Możesz po prostu użyć techniki xsel, jak opisano w ostatniej sekcji.

:r ! xsel -bo ; read  (r) from the stdout of (!) `xsel -bo`
:w ! xsel -b  ; write (w) to the stdin of    (!) `xsel -b`

Zwiąż kilka kombinacji klawiszy i powinieneś być dobry.

 2
Author: Braden Best,
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-05-11 04:36:16

Z tego wątku jest opcja, która nie wymaga instalowania żadnych gclip/xclip/xsel oprogramowanie innych firm.

Skrypt Perla (ponieważ perl jest zwykle zawsze zainstalowany)

use Win32::Clipboard;
print Win32::Clipboard::GetText();
 2
Author: VonC,
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-09-23 00:24:32

[[7]} 2018 odpowiedź

Użyj schowka-cli. Działa z systemami macOS, Windows, Linux, OpenBSD, FreeBSD i Android bez żadnych problemów.

Zainstaluj za pomocą:

npm install -g clipboard-cli

Wtedy możesz zrobić

echo foo | clipboard

Jeśli chcesz, możesz użyć aliasu do cb, umieszczając w swoim .bashrc, .bash_profile, lub .zshrc:

alias cb=clipboard

 2
Author: Evan Conrad,
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-04-05 19:13:22

W systemie macOS użyj pbpaste

Eg:

Zaktualizuj Schowek

pbpaste | ruby -ne ' puts "\|" + $_.split( )[1..4].join("\|") ' | pbcopy

Smacznego.
 1
Author: jiahut,
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-11-02 06:37:06

Istnieje również xclip-copyfile .

 0
Author: Jonathon Reinhart,
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-08-29 11:33:04

Chociaż >rok później, podzielam nieco inne rozwiązanie. Mam nadzieję, że to się komuś przyda.

Wczoraj znalazłem się z pytaniem: "Jak udostępnić Schowek między różnymi sesjami użytkowników?". Przełączanie pomiędzy sesjami za pomocą ctrlaltF7 - ctrlaltF8 , w rzeczywistości nie można wkleić tego, co skopiowałeś.

Wymyśliłem następujące rozwiązanie quick & dirty , oparte na nazwanej rurze. On na pewno całkiem goły i surowy, ale uznałem go za funkcjonalny:

user1@host:~$ mkfifo /tmp/sharedClip

Następnie w terminalu wysyłającym

user1@host:~$ cat > /tmp/sharedClip

Ostatni, w terminalu odbiorczym:

user2@host:~$ cat /tmp/sharedClip

Teraz wpisujesz lub wklejasz cokolwiek w pierwszym terminalu i (po naciśnięciu return ), pojawi się natychmiast w terminalu odbiorczym, skąd możesz kopiować/wklejać ponownie w dowolnym miejscu.

Oczywiście to nie tylko pobiera zawartość ze schowka user1, aby była dostępna w user2 schowka, ale raczej wymaga dodatkowej pary kliknięć Wklej i Kopiuj.

 0
Author: lurix66,
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-10-07 12:55:02