Czy w Bash można przesyłać do / ze schowka w Bash?
Niezależnie od tego, czy jest to przesyłanie strumieniowe do / z uchwytu urządzenia, czy przy użyciu aplikacji pomocniczej, nic nie mogę znaleźć.
Na przykład, jeśli /dev/clip
urządzenie łączy się ze schowkiem, moglibyśmy zrobić:
cat /dev/clip # Dump the contents of the clipboard
cat foo > /dev/clip # Dump the contents of "foo" into the clipboard
:%y+
w vim, który jest vim-speak dla „wycinania (kopia) wszystkie linie do«+»Register (XPRIMARY
schowku)”.%
Jeśli chcesz być konkretny, możesz zastąpić go zakresem. Ale są trzy zastrzeżenia: 1. Teraz musisz zapisać dowolny tekst do pliku, zanim będziesz mógł go skopiować. Jest to sprzeczne zxclip
poleceniem wymienionym w odpowiedziach. 2. Jeśli nie umiesz już vimować, może to być uciążliwe. 3. Możesz to zrobić tylko wtedy, gdy podczas kompilacji vima jest włączona pewna funkcja. Jeśli zainstalujesz GVim, powinien on być domyślnie włączony zarówno w GUI, jak i terminalowych instancjach vima.xclip
. Twoja odpowiedź działała jak urok.:%y+
ten, ale ok, masz wszystkie bazy! Dobry.Odpowiedzi:
Istnieje wiele schowków, z którymi możesz mieć do czynienia. Podejrzewam, że prawdopodobnie jesteś użytkownikiem Linuksa, który chce umieścić rzeczy w głównym schowku X Windows. Zwykle schowek, z którym chcesz rozmawiać, zawiera narzędzie, które pozwala ci z nim rozmawiać.
W przypadku X są
xclip
(i inne).xclip -selection c
wyśle dane do schowka, z którym współpracuje Ctrl + C, Ctrl + Vw większości aplikacji.Jeśli korzystasz z Mac OS X, jest
pbcopy
.Jeśli pracujesz w trybie terminalowym Linuksa (bez X), zajrzyj do
gpm
lub wyświetl ekran ze schowkiem. Wypróbujscreen
poleceniereadreg
.W systemie Windows 10+ lub cygwin użyj
/dev/clipboard
lubclip
.źródło
/dev/clipboard
działa również w przypadku powłok bashowych Msys / MinGWxclip -selection c
wyśle dane do schowka, który współpracuje z ^ C, ^ V w większości aplikacjiclip
tego w następujący sposób:dir | clip
/dev/clipboard
i zmusza do zainstalowania xclip albo gpm, którego domyślnie brakuje przynajmniej w Kubuntu (chyba w większości innych dystrybucji) .Upewnij się, że używasz, w
alias xclip="xclip -selection c"
przeciwnym razie nie możesz po prostu użyć przycisku Ctrl+, vaby wkleić go z powrotem w innym miejscu.Ctrl+v
=== test
źródło
xclip -selection clipboard -o
alias pbcopy="xclip -selection c"
alias pbpaste="xclip -selection clipboard -o"
Mam nadzieję, że to pomaga.xclip
nie dodaje nowego wiersza,echo
jest. Spróbowaćprintf test | xclip -i -selection clipboard
. (printf
nie dodaje nowego wiersza, chyba że napiszesz'test\n'
).echo -n
zamiastprintf
.zainstalować
Jeśli nie masz dostępu do
apt-get
anipacman
, anidnf
, że źródła są dostępne na SourceForge .Ustawiać
Grzmotnąć
W
~/.bash_aliases
dodaj:Nie zapomnij załadować nowej konfiguracji przy użyciu
. ~/.bash_aliases
lub ponownie uruchamiając profil.Ryba
W
~/.config/fish/config.fish
dodaj:Nie zapomnij zrestartować instancji ryby, ponownie uruchamiając terminal, aby zastosować zmiany.
Stosowanie
Możesz teraz używać
setclip
igetclip
np .:źródło
sudo pacman -S xclip
. Pamiętaj jednak, że.bashrc
nie jest to najlepsze miejsce. Polecam, aby użytkownik końcowy przeczytał o odpowiednich plikach bashrc, bash_aliases i .profile oraz o tym, jak bash je obsługuje. Wskazówka: zamiast tego wstaw go w .bash_aliases.pacman
menedżera pakietów i usunąłem.bashrc
propozycję. Wiem, że.bash_aliases
jest bardziej dostosowany, ale efekt końcowy jest taki sam (.bashrc
po prostu wymaga,.bash_aliases
jeśli istnieje). Jeśli ludzie chcą bałaganiarskiego systemu, niech go mają. :).bashrc
źródła.bash_aliases
na końcu. ;) Postępuję zgodnie ze starą konwencją, która pozostaje w 100% kompatybilna z Arch, Ubuntu / Debian, wariantami Raspberry, macOS / OSX i Windows Bash: stefaanlippens.net/my_bashrc_aliases_profile_and_other_stuff W tej konwencji używam tych samych plików dotf na wszystkich komputerach Dotykam. To całkiem miłe: github.com/eduncan911/dotfilesW systemie macOS użyj wbudowanych poleceń
pbcopy
ipbpaste
poleceń.Na przykład, jeśli uruchomisz
zawartość
~/.bashrc
pliku będzie dostępna do wklejenia za pomocą skrótuCmd
+v
.źródło
Próbować
xclip
mężczyzna
źródło
xsel na Debian / Ubuntu / Mint
zainstalować
źródło
echo "foo" | xclip -selection c
?xsel
ixclip
są one równoważne pod każdym względem, z wyjątkiem tego, żexclip
mogą odczytywać / zapisywać pliki według nazwy, alexsel
wymagają przekierowania powłoki, jeśli chcesz uzyskać dostęp do pliku.xsel
działa dobrze ze skryptów, axclip
działa tylko z wiersza poleceń. Nie pewny dlaczego.Wow, nie mogę uwierzyć, ile jest odpowiedzi na to pytanie. Nie mogę powiedzieć, że wypróbowałem je wszystkie, ale wypróbowałem najlepsze 3 lub 4 i żadne z nich nie działa dla mnie. Dla mnie zadziałała odpowiedź znajdująca się w jednym z komentarzy napisanych przez użytkownika o nazwie doug. Ponieważ uznałem to za pomocne, postanowiłem odpowiedzieć w odpowiedzi.
Zainstaluj narzędzie xcopy, a gdy jesteś w terminalu, wprowadź:
Kopiuj
Pasta
Zauważyłem wiele odpowiedzi polecanych pbpaste i pbcopy. Jeśli lubisz te narzędzia, ale z jakiegoś powodu nie są one dostępne w repozytorium, zawsze możesz utworzyć alias dla poleceń xcopy i nazwać je pbpaste i pbcopy.
Więc wyglądałoby to tak:
źródło
2018 odpowiedź
Użyj schowka-cli . Działa z systemami macOS, Windows, Linux, OpenBSD, FreeBSD i Android bez żadnych problemów.
Zainstaluj z:
npm install -g clipboard-cli
To możesz zrobić
echo foo | clipboard
Jeśli chcesz, możesz alias
cb
umieszczając następuje w twojej.bashrc
,.bash_profile
albo.zshrc
:alias cb=clipboard
źródło
npm
pakiet?W podsystemie Windows dla systemu Linux można skopiować do schowka za pomocą clip.exe.
Pamiętaj, aby użyć
|
polecenia potoku. I nie>
polecenie, ponieważ to nie zadziała.źródło
Oto gotowy do użycia skrypt bash do czytania schowka, który działa na wielu platformach. Edytuj skrypt tutaj, jeśli dodajesz funkcjonalność (np. Więcej platform).
źródło
W systemie Windows (z Cygwin) spróbuj
cat /dev/clipboard
lubecho "foo" > /dev/clipboard
jak wspomniano w tym artykule.źródło
clip
. Używam msysgit 1.9.5 i to zadziałało.echo "foo" > /dev/clipboard
wydaje się całkowicie niszczyć nowe linie (nie jest rzeczą \ r \ n \ n, ale całkowicie zniknął)Tylko dla komputerów Mac:
Są one zlokalizowane
/usr/bin/pbcopy
i/usr/bin/pbpaste
.źródło
Istnieją różne schowki w systemie Linux; X serwer ma jeden, menedżer okien może mieć inny itp. Nie ma standardowego urządzenia.
Och, tak, na CLI program ekranowy również ma swój własny schowek, podobnie jak niektóre inne aplikacje, takie jak Emacs i vi .
W X możesz użyć xclip .
Możesz sprawdzić ten wątek pod kątem innych możliwych odpowiedzi: http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html
źródło
Skopiuj i wklej do schowka w Windows (Cygwin):
Widzieć:
Istnieją również getclip (można go użyć zamiast Shift+ Ins!) I putclip (echo oaeuoa | putclip.exe, aby umieścić go w klipie).
źródło
Jest to prosty skrypt w języku Python, który robi dokładnie to, czego potrzebujesz:
Zapisz to jako plik wykonywalny gdzieś na swojej ścieżce (zapisałem go
/usr/local/bin/clip
. Możesz przesyłać rzeczy do zapisania w schowku ...Możesz przesyłać zawartość schowka do innego programu ...
Samo uruchomienie spowoduje po prostu wyświetlenie zawartości schowka.
źródło
cat tmpfile
nie operacja schowka. // to samo co odpowiedzi @horta.Znalazłem dobre referencje: /unix/69111/
W moim przypadku chciałbym wkleić zawartość do schowka, a także zobaczyć, co tam jest wklejone, więc użyłem również
tee
polecenia z deskryptorem pliku:>()
jest formą substytucji procesu. bash zastępuje każdy ścieżką do deskryptora pliku, który jest podłączony do standardowego wejścia programu w nawiasach.tee
Komenda rozwidla Twojego polecenia pozwalające na jego treść „rura” i zobaczyć wynik na standardowe wyjście „stdout”możesz również tworzyć aliasy, aby pobierać i pisać w schowku, co pozwala używać „pbcopy” i „pbpaste” tak, jakbyś był na MAC. W moim przypadku, gdy używam zsh, mam to w moim pliku aliasów:
(( $+command[name] ))
w testach zsh jeśli komenda „nazwa” jest zainstalowany w systemie, a następnie oba aliasy są zgrupowane{}
.&&
jest binarny, a jeśli potem b, stąd jeśli masz xclip następnie aliasy będzie komplet.Aby uzyskać zawartość schowka, po prostu wpisz:
źródło
Wykonuje zadanie dla X Window i jest w większości już zainstalowane. Warto zajrzeć na stronę podręcznika użytkownika Xsel .
źródło
Kilka programów Windows napisałem lata temu. Pozwalają na zrzucanie, pchanie, dołączanie i drukowanie schowka. Działa to tak:
Zawiera kod źródłowy: cmd_clip.zip
źródło
Jest kilka sposobów. Niektóre ze wspomnianych sposobów obejmują (myślę) tmux, screen, vim, emacs i powłokę. Nie znam emacsa ani ekranu, więc przejrzę pozostałe trzy.
Tmux
Chociaż nie jest wyborem X, tmux ma tryb kopiowania dostępny za pośrednictwem
prefix-[
( domyślnieprefix
jest Ctrl+ B). Bufor używany w tym trybie jest osobny i wyłączny dla tmux, co otwiera całkiem sporo możliwości i czyni go bardziej uniwersalnym niż selekcje X we właściwych sytuacjach.Aby wyjść z tego trybu, naciśnij q; do nawigacji, użyj swojego
vim
lubemacs
bindowania (domyślnie = vim), więchjkl
do ruchu,v/V/C-v
do wyboru postaci / linii / bloku itp. Kiedy masz wybór, naciśnijEnter aby skopiować i wyjść z trybu.Aby wkleić z tego bufora, użyj
prefix-]
.Muszla
Wszelkie instalacja
X11
wydaje się pochodzić z dwóch programów domyślnie:xclip
ixsel
(trochę jak jak to jest również wyposażony zarównostartx
axinit
). Większość innych odpowiedzi wspominaxclip
i naprawdę lubię toxsel
za zwięzłość, więc zamierzam to omówićxsel
.Z Xsel (1x) :
I to wszystko, co musisz wiedzieć.
p
(lub nic) dlaPRIMARY
,s
dlaSECONDARY
,b
dlaCLIPBOARD
,o
dla produkcji.Przykład: powiedz, że chcę skopiować wynik
foo
z TTY i wkleić go na stronę internetową w celu zgłoszenia błędu. Aby to zrobić, najlepiej byłoby skopiować do / z sesji TTY / X. Powstaje więc pytanie, jak uzyskać dostęp do schowka z TTY?W tym przykładzie założymy, że sesja X jest wyświetlana
:1
.Potem mogę to
Ctrl-V
zrobić jak zwykle.Teraz powiedz, że ktoś na stronie pomocy technicznej wydaje mi polecenie uruchomienia w celu rozwiązania problemu. To skomplikowane i długie.
Zamawianie pizzy wydaje się produktywnym wykorzystaniem wiersza poleceń.
...iść dalej.
Wigor
Jeśli skompilowany z
+clipboard
(Jest to ważne! Sprawdź swójvim --version
), Vim powinien mieć dostęp do XPRIMARY
iCLIPBOARD
selekcji. Te dwie opcje są dostępne odpowiednio z rejestrów*
i+
, i mogą być zapisywane i odczytywane w czasie wolnym tak samo, jak każdy inny rejestr. Na przykład: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ć
xsel
techniki opisanej w ostatniej części.Powiąż kilka kluczowych kombinacji i powinieneś być dobry.
źródło
DISPLAY=
podczas wywoływania aplikacji X ze środowiska innego niż X. Aplikacje X potrzebująDISPLAY
zmiennej środowiskowej, aby dowiedzieć się, z którym serwerem (czy jest tylko jeden serwer obsługujący wiele sesji?), Z którym rozmawiają. SpróbujDISPLAY=:1 firefox
(lub jakikolwiek twój identyfikator ekranowy; mój akurat tak się składa:1
) na przykład z TTY.:%y+
w VIM.Z tego wątku jest opcja, która nie wymaga instalowania żadnego oprogramowania
gclip
/xclip
/xsel
innych firm.Skrypt perla (ponieważ perl jest zwykle zawsze instalowany)
źródło
pbcopy jest wbudowany w OSX:
Kopiowanie zawartości pliku .bash_profile:
źródło
W systemie macOS użyj
pbpaste
.Na przykład:
Zaktualizuj schowek
źródło
Jeśli jesteś podobny do mnie i działasz na serwerze Linux bez uprawnień roota i nie ma żadnego XClip ani GPM, możesz obejść ten problem, używając tylko pliku tymczasowego. Na przykład:
źródło
X selections
(co jest koniecznie sugerowane przez „schowek” i jakiekolwiek wzmianki o xclip / xsel), potrzebujesz aktywnej sesji X (a tym samym serwera X), abyś mógł uzyskać dostęp do wyboru w pierwsze miejsce. Aby zobaczyć, co mam na myśli, spróbuj uruchomićDISPLAY="" xsel
na komputerze lokalnym. Wyjdzie po błędzie, nie będzie w stanie znaleźć sesji""
i nie zostanie wykonana interakcja z żadnym wyborem X. Dlatego początkowo powiedziałem, że nie rozumiem, w jaki sposób uwzględniają to uprawnienia root: root lub brak root, prawdopodobnie nie znajdziesz wyboru X przydatnego w środowisku serwerowym.W systemie Linux działa to:
źródło
na Wayland xcopy nie działa, zamiast tego użyj schowka wl . np. na fedorze
źródło
Istnieje również plik xclip-copyfile .
źródło
Chociaż> 1 rok później podzielam nieco inne rozwiązanie. Mam nadzieję, że jest to przydatne dla kogoś.
Wczoraj znalazłem się z pytaniem: „Jak udostępnić schowek między różnymi sesjami użytkowników?” . Podczas przełączania między sesjami za pomocą ctrlaltF7-ctrlaltF8 w rzeczywistości nie można wkleić skopiowanych treści.
Wymyśliłem następujące szybkie i brudne rozwiązanie oparte na nazwanej rurze. Z pewnością jest dość goły i surowy, ale uważam, że jest funkcjonalny:
następnie w terminalu wysyłającym
wreszcie w terminalu odbiorczym:
Teraz wpisz lub wklej wszystko w pierwszym terminalu i (po naciśnięciu return ) pojawi się ono natychmiast w terminalu odbiorczym, skąd możesz skopiować / wkleić ponownie w dowolnym miejscu.
Oczywiście nie tylko ściśle bierze zawartość ze schowka użytkownika 1, aby była dostępna w schowku użytkownika 2, ale raczej wymaga dodatkowej pary kliknięć Wklej i Kopiuj.
źródło
xsel/xclip
. Na przykład jeden koniec nasłuchuje, czy którykolwiek z wybranych elementów się zmienił, a następnie automatycznie przesyła go (za pośrednictwem nazwanego FIFO) do drugiego skryptu, który nasłuchuje jednej lub więcej rur, które wstawiają go do własnego wyboru X. Skopiowanie tekstu spowodowałoby zatem automatyczne pojawienie się tego samego tekstu w zaznaczeniu drugiej sesji X. I nie zapomnij o$DISPLAY
.Rubinowy oneliner zainspirował mnie do wypróbowania Pythona.
Powiedzmy, że chcemy polecenia, które wcina wszystko, co znajduje się w schowku, za pomocą 4 spacji. Idealne do udostępniania fragmentów przy przepełnieniu stosu.
to nie literówka. Python potrzebuje nowego wiersza, aby wykonać pętlę for. Chcemy zmieniać wiersze w jednym przejściu, aby uniknąć tworzenia dodatkowej tablicy w pamięci.
Jeśli nie masz nic przeciwko zbudowaniu dodatkowej tablicy, spróbuj:
ale szczerze mówiąc, awk jest do tego lepszy niż python. Ten alias zdefiniowałem w swoim
~/.bashrc
plikuteraz, gdy uruchamiam,
indent
wszystko, co jest w moim schowku, jest wcięte.źródło