Potok do / ze schowka w skrypcie Bash


945

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/clipurzą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

3
Używam :%y+w vim, który jest vim-speak dla „wycinania (kopia) wszystkie linie do«+»Register (X PRIMARYschowku)”. %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 z xclippoleceniem 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.
Braden Best

1
@BradenBest powinieneś podać to jako odpowiedź. Jestem w środowisku NIX i nie mogłem zainstalować xclip. Twoja odpowiedź działała jak urok.
HankCa

@HankCa W porządku, opublikowałem odpowiedź . Powiedz mi co myślisz.
Braden Best

@BradenBest to bardzo wyczerpująca odpowiedź. Po prostu spodobał mi się :%y+ten, ale ok, masz wszystkie bazy! Dobry.
HankCa

Inna opcja: użycie małego skryptu perl: nie wymaga instalacji. Zobacz moją odpowiedź poniżej .
VonC

Odpowiedzi:


861

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 cwyś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 gpmlub wyświetl ekran ze schowkiem. Wypróbuj screenpolecenie readreg.

W systemie Windows 10+ lub cygwin użyj /dev/clipboardlub clip.



24
w systemie Windows /dev/clipboarddziała również w przypadku powłok bashowych Msys / MinGW
Mihai Rotaru,

71
Zauważ, że xclip -selection cwyśle ​​dane do schowka, który współpracuje z ^ C, ^ V w większości aplikacji
Klaas van Schelven

31
w nowszych wersjach systemu Windows możesz po prostu użyć cliptego w następujący sposób:dir | clip
maep

11
To smutne, że GNU / Linux nie ma takiego urządzenia /dev/clipboardi zmusza do zainstalowania xclip albo gpm, którego domyślnie brakuje przynajmniej w Kubuntu (chyba w większości innych dystrybucji) .
Cześć Angel

282

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.

echo test | xclip    

Ctrl+v === test


1
Jak można wkleić go bez tego argumentu polecenia?
Jonasz

15
xclip -selection clipboard -o
doug

32
ponieważ często chodzę między osxem i linuksem, mam w plikach dot następujące. alias pbcopy="xclip -selection c" alias pbpaste="xclip -selection clipboard -o" Mam nadzieję, że to pomaga.
doug

15
@ApockofFork, xclipnie dodaje nowego wiersza, echojest. Spróbować printf test | xclip -i -selection clipboard. ( printfnie dodaje nowego wiersza, chyba że napiszesz 'test\n').
David X

7
Lub użyj echo -nzamiast printf.
Christian Pietsch,

182

zainstalować

# 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-getani pacman, ani dnf, że źródła są dostępne na SourceForge .

Ustawiać

Grzmotnąć

W ~/.bash_aliasesdodaj:

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

Nie zapomnij załadować nowej konfiguracji przy użyciu . ~/.bash_aliaseslub ponownie uruchamiając profil.

Ryba

W ~/.config/fish/config.fishdodaj:

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

Nie zapomnij zrestartować instancji ryby, ponownie uruchamiając terminal, aby zastosować zmiany.

Stosowanie

Możesz teraz używać setclipi getclipnp .:

$ echo foo | setclip
$ getclip
foo

3
Dla wszystkich innych dystrybucji: możesz pobrać źródło ze sourceforge.net/projects/xclip
Scz

+1 Najlepsze rozwiązanie! W Arch sudo pacman -S xclip. Pamiętaj jednak, że .bashrcnie 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.
eduncan911,

1
Dzięki @ eduncan911! :) Dodano opcję korzystania z pacmanmenedżera pakietów i usunąłem .bashrcpropozycję. Wiem, że .bash_aliasesjest bardziej dostosowany, ale efekt końcowy jest taki sam ( .bashrcpo prostu wymaga, .bash_aliasesjeśli istnieje). Jeśli ludzie chcą bałaganiarskiego systemu, niech go mają. :)
tleb

@EladTabak Happy to pomogło.
tleb

1
@jpaugh masz rację. moje .bashrcźródła .bash_aliasesna 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/dotfiles
eduncan911

143

W systemie macOS użyj wbudowanych poleceń pbcopyi pbpastepoleceń.

Na przykład, jeśli uruchomisz

cat ~/.bashrc | pbcopy

zawartość ~/.bashrcpliku będzie dostępna do wklejenia za pomocą skrótu Cmd+ v.



25

xsel na 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

zainstalować

sudo apt-get install xsel

Czym to się różni echo "foo" | xclip -selection c?
Léo Léopold Hertz

Istnieje kilka odpowiedzi na tę odpowiedź Zapytaj Ubuntu , ale głównie xseli xclipsą one równoważne pod każdym względem, z wyjątkiem tego, że xclipmogą odczytywać / zapisywać pliki według nazwy, ale xselwymagają przekierowania powłoki, jeśli chcesz uzyskać dostęp do pliku.
Colin D Bennett,

xseldziała dobrze ze skryptów, a xclip działa tylko z wiersza poleceń. Nie pewny dlaczego.
NVRM,

16

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

Thing_you_want_to_copy|xclip -selection c

Pasta

myvariable=$(xclip -selection clipboard -o)

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.

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

Więc wyglądałoby to tak:

Thing_you_want_to_copy|pbcopy
myvariable=$(pbpaste)

Świetnie, twoja część aliasowa całkiem dobrze odpowiada MacOS.
MeadowMuffins,

15

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 cbumieszczając następuje w twojej .bashrc, .bash_profilealbo .zshrc:

alias cb=clipboard


2
Czy na pewno jest to bezpieczny npmpakiet?
Johnny,

3
@Stas, mam nadzieję, że tak, jest autorstwa Sindresorhus ( github.com/sindresorhus ), najbardziej płodnego współpracownika węzła. Jest odpowiedzialny za bibliotekę testową Ava, liner xo, Yeoman i wiele innych projektów. Jest także odpowiedzialny za niezliczone małe biblioteki, takie jak ta, które zbiorczo umieszczają swój kod na prawie każdej stronie internetowej korzystającej z JS. Nie oznacza to, że nie można go skompromitować; tyle, że ilość jego spojrzeń i jego reputacja sprawiają, że jest znacznie mniej prawdopodobne niż większość losowych repozytoriów npm.
Evan Conrad

Fajne! Praca na Ubuntu GNU / Linux, gdzie xclip nie działa.
Kevin Buchs

14

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

cat file | clip.exe

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


11

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).

#!/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

bruhh, to faktycznie działa, dlaczego nie jest to odpowiedź?
255.tar.xz

9

W systemie Windows (z Cygwin) spróbuj cat /dev/clipboardlub echo "foo" > /dev/clipboardjak wspomniano w tym artykule.


1
Jak wspomniano w oddzielnym komentarzu użytkownika @maep, nowsze wersje systemu Windows (mogę tylko potwierdzić dla Win10) mogą po prostu przesyłać do potoku clip. Używam msysgit 1.9.5 i to zadziałało.
Shawn Erquhart,

echo "foo" > /dev/clipboardwydaje się całkowicie niszczyć nowe linie (nie jest rzeczą \ r \ n \ n, ale całkowicie zniknął)
user1529413

9

Tylko dla komputerów Mac:

echo "Hello World" | pbcopy
pbpaste

Są one zlokalizowane /usr/bin/pbcopyi /usr/bin/pbpaste.


8

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


2
Wygląda na to, że tworzenie / dev / clip byłoby dla kogoś dobrym projektem.
TED

2
Doskonale zdaję sobie sprawę z wielu schowków. Jak to utrudnia odpowiedź na moje pytanie?
moinudin

Sensowne byłoby, gdyby schowki były znormalizowane, prawdopodobnie nie zaszkodziłoby, gdybyś mógł użyć / dev / clip1, / ​​dev / clip2 .. / dev / clip <n>, aby uzyskać do nich dostęp, jedynym problemem jest to, że są one specyficzne dla użytkownika i urządzenia są ogólnosystemowe. Ale jeśli stworzysz sterownik urządzenia jądra, który maskuje zgodnie z UID uzyskującym dostęp, powinien działać zgodnie z oczekiwaniami.

5

Skopiuj i wklej do schowka w Windows (Cygwin):

Widzieć:

$ clip.exe -?

CLIP
Description:
    Redirects output of command line tools to the Windows clipboard.
    This text output can then be pasted into other programs.
Parameter List:
/?                  Displays this help message.
Examples:
DIR | CLIP          Places a copy of the current directory
                        listing into the Windows clipboard.
CLIP < README.TXT   Places a copy of the text from readme.txt
                        on to the Windows clipboard.

Istnieją również getclip (można go użyć zamiast Shift+ Ins!) I putclip (echo oaeuoa | putclip.exe, aby umieścić go w klipie).


4

Jest to prosty skrypt w języku Python, 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ś na swojej ścieżce (zapisałem go /usr/local/bin/clip. Możesz przesyłać rzeczy do zapisania w schowku ...

echo "Hello World" | clip

Możesz przesyłać zawartość schowka do innego programu ...

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

Samo uruchomienie spowoduje po prostu wyświetlenie zawartości schowka.


Działa to, gdy jesteś na jednym komputerze, ale nie pozwala ci kopiować rzeczy między komputerami.
Charles Plager

wydaje się tylko `echo str> tmpfile`, a cat tmpfilenie operacja schowka. // to samo co odpowiedzi @horta.
yurenchen

to nie wydaje się ustawiać zmiennej schowka, więc nie mogę wkleić zawartości w innej aplikacji - to nie jest prawdziwy schowek!
jena

4

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ż teepolecenia z deskryptorem pliku:

echo "just a test" | tee >(xclip -i -selection clipboard)

>()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.

teeKomenda 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:

(( $+commands[xclip] )) && {
    alias pbpaste='xclip -i -selection clipboard -o'
    alias pbcopy='xclip -selection clipboard'
}

(( $+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.

echo "another test" | tee >(pbcopy)

Aby uzyskać zawartość schowka, po prostu wpisz:

pbpaste | "any-command-you-need-here"


2

Kilka programów Windows napisałem lata temu. Pozwalają na zrzucanie, pchanie, dołączanie i drukowanie schowka. Działa to tak:

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

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


2

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ślnie prefixjest 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 vimlub emacsbindowania (domyślnie = vim), więc hjkldo ruchu, v/V/C-vdo 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 X11wydaje się pochodzić z dwóch programów domyślnie: xclipi xsel(trochę jak jak to jest również wyposażony zarówno startxa xinit). Większość innych odpowiedzi wspomina xclipi naprawdę lubię to xselza zwięzłość, więc zamierzam to omówić xsel.

Z Xsel (1x) :

Opcje wprowadzania

-a, --append

dołącz standardowe wejście do zaznaczenia. Implikuje -i .

-f, - śledź

dołącz do wyboru, gdy rośnie standardowe wejście. Implikuje -i .

-i, --input

przeczytaj standardowe wejście do zaznaczenia.

Opcje wyjściowe

-o, --output

zapisz wybór na standardowe wyjście.

Opcje działania

-c, - jasne

wyczyść wybór. Zastępuje wszystkie opcje wprowadzania.

-d, --delete

Poproś o usunięcie bieżącego wyboru. Spowoduje to nie tylko wyczyszczenie zaznaczenia, ale także zgłoszenie żądań do programu, w którym zaznaczono, aby usunąć wybraną zawartość. Zastępuje wszystkie opcje wprowadzania.

Opcje wyboru

-p, --podstawowe

działają na wybór PODSTAWOWY (domyślnie).

-s, - Secondary

działają w trybie wyboru DRUGIEGO.

-b, - schowek

działają na wybór SCHOWKA.

I to wszystko, co musisz wiedzieć. p(lub nic) dla PRIMARY, sdla SECONDARY, bdla CLIPBOARD, odla produkcji.

Przykład: powiedz, że chcę skopiować wynik fooz 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.

$ 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

Potem mogę to Ctrl-Vzrobić jak zwykle.

Teraz powiedz, że ktoś na stronie pomocy technicznej wydaje mi polecenie uruchomienia w celu rozwiązania problemu. 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 wiersza poleceń.

...iść dalej.

Wigor

Jeśli skompilowany z +clipboard(Jest to ważne! Sprawdź swój vim --version), Vim powinien mieć dostęp do X PRIMARYi CLIPBOARDselekcji. 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:

:%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ć xseltechniki opisanej w ostatniej części.

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

Powiąż kilka kluczowych kombinacji i powinieneś być dobry.


Zdecydowanie zawsze pamiętaj o używaniu DISPLAY=podczas wywoływania aplikacji X ze środowiska innego niż X. Aplikacje X potrzebują DISPLAYzmiennej środowiskowej, aby dowiedzieć się, z którym serwerem (czy jest tylko jeden serwer obsługujący wiele sesji?), Z którym rozmawiają. Spróbuj DISPLAY=:1 firefox(lub jakikolwiek twój identyfikator ekranowy; mój akurat tak się składa :1) na przykład z TTY.
Braden Best

Dla mnie wybór w moim środowisku był :%y+w VIM.
HankCa

2

Z tego wątku jest opcja, która nie wymaga instalowania żadnego oprogramowania gclip/ xclip/ xselinnych firm.

Skrypt perla (ponieważ perl jest zwykle zawsze instalowany)

use Win32::Clipboard;
print Win32::Clipboard::GetText();

Jak miałbym tego użyć? Zapisać skrypt w ŚCIEŻCE i wstawić do niego? Próbuję napisać opakowanie cli Dropbox, aby skopiować linki udostępniania, więc potrzebuję go tylko do obsługi tekstu.
Jen


2

pbcopy jest wbudowany w OSX:

Kopiowanie zawartości pliku .bash_profile:

cat ~/.bash_profile | pbcopy

1

W systemie macOS użyj pbpaste .

Na przykład:

Zaktualizuj schowek

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

1

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:

$ echo "Hello, World!" > ~/clip
$ echo `cat ~/clip`
Hello, World!

Nie rozumiem, jak na to wpływa brak uprawnień roota.
Braden Best

3
@BradenBest Brak uprawnień roota oznacza, że ​​nie mogłem instalować różnych rzeczy.
horta

Ale co byś instalował? X? Na serwerze? O ile nie prowadzisz jakiejś dziwnej usługi przesyłania X, nie rozumiem, dlaczego chcesz to zrobić.
Braden Best

@BradenBest Nie jestem pewien. Jakikolwiek program lub usługa pozwoli mi wykonać kopiowanie wklej.
horta

1
Cóż, jeśli używasz któregokolwiek 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="" xselna 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.
Braden Best




0

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:

user1@host:~$ mkfifo /tmp/sharedClip

następnie w terminalu wysyłającym

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

wreszcie w terminalu odbiorczym:

user2@host:~$ cat /tmp/sharedClip

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.


Nie wydaje się to zbyt zaskakujące. Dwa różne serwery X = dwa różne zestawy wyboru. Jednak mógł skonfigurować skrypt, który zaczyna wejścia / wyjścia poprzez 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.
Braden Best

0

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.

$ pbpaste | python -c "import sys
 for line in sys.stdin:
   print(f'    {line}')" | pbcopy

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:

$ pbpaste | python -c "import sys; print(''.join([f'    {l}' for l in sys.stdin]))" | pbcopy

ale szczerze mówiąc, awk jest do tego lepszy niż python. Ten alias zdefiniowałem w swoim ~/.bashrcpliku

alias indent="pbpaste | awk '{print \"    \"\$0}' | pbcopy"

teraz, gdy uruchamiam, indentwszystko, co jest w moim schowku, jest wcięte.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.