Co to jest pbcopy OSX dla systemu Linux

141

W terminalu w OSX mogę przesyłać dane wyjściowe do pbcopy, a następnie przejść do przeglądarki internetowej i wkleić je. Próbowałem tego w Linuksie z xcopy, ale kiedy przełączam się na przeglądarkę, po prostu nadpisuje schowek tym, co było w nim przy ostatnim użyciu przeglądarki. Co działa jak pbcopy w systemie Linux?

tony_sid
źródło
2
... a dla tych, którzy nie wiedzą, co to jest pbcopy, oto strona man developer.apple.com/library/mac/#documentation/Darwin/Reference/...
Rob Cowell
Pomocnym narzędziem jest ClipIt (i podobne menedżery schowka). Nie tylko ładnie gra w terminalu, ale także zachowuje historię schowka. Całkiem użyteczne.
brandizzi,

Odpowiedzi:

162

jeśli masz X, możesz spróbować xsel w ten sposób:

alias pbcopy='xsel --clipboard --input'
alias pbpaste='xsel --clipboard --output'

lub z xclip:

alias pbcopy='xclip -selection clipboard'
alias pbpaste='xclip -selection clipboard -o'

teraz możesz ich używać:

echo 'go to my clipboard' | pbcopy

kiedy nie mam XI używam funkcji GNU Screen do kopiowania między otwartymi powłokami w sesji za pomocą klawiatury

kopiować : Ctrl-a -> Esc -> go to wanted position * -> Space (to begin selecting) -> press k to go forward mark text -> Enter

wkleić : Ctrl-a + ]

* ruchy wykonywane są za pomocą klawiszy Vim (j, k, l & m).

amized
źródło
1
Dzięki, to jest dokładnie taka informacja, jakiej chciałem. Zastanawiam się teraz, czy istnieje sposób, w jaki mogę sprawić, by Screen pozwolił mi używać poleceń Emacsa, aby wybrać obszar, który chcę skopiować ...
Noah Sussman
8
xsel: Nie można otworzyć wyświetlacza: (null): Niewłaściwy ioctl dla urządzenia
itsazzad
Rozwiązałem problem „Nie można otworzyć ekranu” w systemie Windows, instalując Xming i ustawiając DISPLAY =: 0
scottgwald
1
Dla użytkowników tmux jest bardziej podobny Ctrl-b, [ -> go to position -> Space -> select texts -> Enteri wklejCtrl-b, ]
el que m'est
O ile to możliwe - jeśli jest to oczywiście coś, czego chcesz na stałe - zamiast komplikować przestrzeń nazw aliasingiem w swoim profilu, lepiej będzie utworzyć w tym celu podstawowy skrypt /bin/. Zwłaszcza jeśli udostępniasz swój profil między systemami macOS i Linux.
Benjamin R
9

Umieść skrypt o nazwie pbcopy w folderze bin:

#!/bin/bash
xclip -i -sel c -f |xclip -i -sel p

Spowoduje to umieszczenie STDIN zarówno w buforze wyboru, jak iw schowku:

echo Hello world |pbcopy
Erik
źródło
Dlaczego miałoby to catbyć potrzebne? Czy w tym przypadku nie będzie to po prostu przekierowywanie stdin na stdout, a tym samym bezużyteczne wykorzystywanie kotów, czy coś mi brakuje?
Hultner
2
Masz rację, wygląda to na bezużyteczne wykorzystywanie kotów :-)
Erik
2
jeśli zastanawiasz się, gdzie jest tajemniczy „bezużyteczny kot”, został on usunięty przez edycję. NTS: w przypadku mylących komentarzy sprawdź historię ^^ '
yaitloutou
Jak wkleić zawartość po użyciu? Po prostu używasz xclip -o? Czy jest jakiś lepszy sposób?
n1k31t4
@ n1k31t4 To, co zrobiłem, to stworzenie równoważnego skryptu używającego xclip -sel c -oskryptu w /bin/pbpaste.
Benjamin R
5

Aby rozwinąć rozwiązania @Erik i @xpixelz; te dwa skrypty powinny działać na obu platformach:

pbcopy:

#!/bin/bash
__IS_MAC=${__IS_MAC:-$(test $(uname -s) == "Darwin" && echo 'true')}
if [ -n "${__IS_MAC}" ]; then
  cat | /usr/bin/pbcopy
else
  # copy to selection buffer AND clipboard
  cat | xclip -i -sel c -f | xclip -i -sel p
fi

pbpaste:

#!/bin/bash
__IS_MAC=${__IS_MAC:-$(test $(uname -s) == "Darwin" && echo 'true')}
if [ -n "${__IS_MAC}" ]; then
  /usr/bin/pbpaste
else
  xclip -selection clipboard -o
fi
Wes Turner
źródło
Ale dlaczego miałbyś w ogóle mieć ten skrypt na OS X, gdzie jest on częścią natywnego obszaru użytkownika?
Hultner
* jako odniesienie do podobnej funkcjonalności, * wieloplatformowe pliki dot: github.com/westurner/dotfiles/blob/develop/scripts/pbcopy
Wes Turner
Nadal nadużywanie kotów i dlaczego nie sprawdzić, czy xclip istnieje, i przypisać alias, jeśli tak jest? Lub sprawdź, czy istnieje plik binarny pbpaste również byłby opcją. Sprawdzanie uname wydaje się dziwnym podejściem do problemu.
Hultner
2
@Hultner „Sprawdzanie uname wydaje się dziwnym podejściem do problemu” Możesz również sprawdzić pliki binarne, preferencyjnie, w kolejności, z wyjątkiem przypisań a ${a:-${b:-${c:+${d}}}}i niektórych type -P/ haszmiennych oraz / bin / test execs.
Wes Turner,
2

Ta odpowiedź dotyczy podsystemu Linux dla systemu Windows.

Krótka odpowiedź: użyj clip.exetak, jakby to było pbcopy, aby umieścić coś w schowku systemu Windows. To magia. Przykład echo "Hello Windows" | clip.exew terminalu bash lub Ubuntu, a następnie `ctrl-v 'w programie Windows.

Więcej kontekstu:

W powyższym komentarzu wspomniałem, że podczas korzystania z Xming w systemie Windows w celu włączenia tej funkcji konieczne jest ustawienie zmiennej DISPLAY ( export DISPLAY=:0w wielu przypadkach) przed działaniem xseli xcliprozwiązań. Co ciekawe, to rozwiązanie działa w niewiarygodny, stochastyczny sposób - podczas wklejania z Linuksa do Windows, naciśnięcie ctrl-vod jednego do dziesięciu razy powoduje wklejenie schowka (jeden raz) (tak jest w moim Windows 10 Surface Book 2). Nie marnuj czasu, użyj clip.exe.

UWAGA: nie zapomnij .exe. W przeciwnym razie Ubuntu bash zasugeruje zainstalowanie pakietu Linux geomview, co nie jest tym, czego chcesz.

Scottottwald
źródło