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
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).
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
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
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.
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
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
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
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/clipboard
Jak wspomniano w w tym artykule.
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
.
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
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)
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)
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.
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.
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.
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
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
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):
I to wszystko, co musisz wiedzieć.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.
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.
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();
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
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
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 .
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.
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