Was ist mit OSXs pbcopy für Linux?

141

In einem Terminal in OSX kann ich die Ausgabe per Pipe an pbcopy übergeben und dann in einen Webbrowser wechseln und ihn einfügen. Ich habe dies unter Linux mit xcopy versucht, aber wenn ich zum Browser wechsle, wird die Zwischenablage nur mit dem Inhalt überschrieben, der sich bei der letzten Verwendung des Browsers darin befand. Wie funktioniert pbcopy unter Linux?

tony_sid
quelle
2
... und für diejenigen, die nicht wissen, was pbcopy ist, hier die Manpage developer.apple.com/library/mac/#documentation/Darwin/Reference/…
Rob Cowell
Ein Tool, das dabei hilfreich sein kann, ist ClipIt (und ähnliche Manager für die Zwischenablage). Es spielt sich nicht nur gut im Terminal ab, sondern behält auch den Verlauf der Zwischenablage bei. Ziemlich nützlich.
Brandizzi

Antworten:

162

Wenn Sie X installiert haben, können Sie xsel folgendermaßen ausprobieren:

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

oder mit xclip:

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

Jetzt kannst du sie benutzen:

echo 'go to my clipboard' | pbcopy

Wenn ich nicht über X verfüge, verwende ich die GNU Screen-Funktionalität zum Kopieren zwischen geöffneten Shells in einer Sitzung mithilfe der Tastatur

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

einfügen : Ctrl-a + ]

* Bewegungen erfolgen mit vim-ähnlichen Tastenkombinationen (j, k, l & m).

amized
quelle
1
Danke, das ist genau die Information, die ich wollte. Nun frage ich mich, ob es eine Möglichkeit gibt, Screen so zu gestalten, dass ich mithilfe von Emacs-Befehlen den Bereich auswähle, den ich kopieren möchte ...
Noah Sussman
8
xsel: Anzeige kann nicht geöffnet werden: (null): Unangemessenes ioctl für Gerät
itsazzad
Ich habe das Problem "Anzeige kann nicht geöffnet werden" unter Windows gelöst, indem ich Xming installiert und DISPLAY =: 0
scottgwald
1
Für tmux-Benutzer ist es eher so, Ctrl-b, [ -> go to position -> Space -> select texts -> Enterals würde man es einfügenCtrl-b, ]
el que m'est
Wann immer es möglich ist - wenn dies natürlich dauerhaft sein soll -, anstatt Ihren Namespace durch Aliasing in Ihrem Profil zu komplizieren , ist es besser, ein grundlegendes Skript für dieses in zu erstellen /bin/. Vor allem, wenn Sie Ihr Profil zwischen MacOS- und Linux-Computern teilen.
Benjamin R
9

Legen Sie ein Skript wie dieses mit dem Namen pbcopy in Ihren bin-Ordner:

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

Dadurch wird STDIN sowohl in Ihrem Auswahlpuffer als auch in der Zwischenablage abgelegt:

echo Hello world |pbcopy
Erik
quelle
Warum sollte das catnötig sein? Wird es in diesem Fall nicht einfach stdin auf stdout umleiten, also sinnlosen Katzenmissbrauch, oder vermisse ich etwas?
Hultner
2
Sie haben Recht, es scheint wie nutzloser Katzenmissbrauch :-)
Erik
2
Wenn Sie sich (wie ich) fragen, wo sich die mysteriöse "nutzlose Katze" befindet, wurde sie von der Bearbeitung entfernt. NTS: Bei verwirrenden Kommentaren den Verlauf überprüfen ^^ '
yaitloutou
Wie fügt man den Inhalt danach ein? Nur mit xclip -o? Oder gibt es einen besseren Weg?
n1k31t4
@ n1k31t4 Ich habe ein äquivalentes Skript xclip -sel c -ofür ein Skript unter erstellt /bin/pbpaste.
Benjamin R
5

Erweiterung der Lösungen von @Erik und @xpixelz; Diese beiden Skripte sollten auf beiden Plattformen funktionieren:

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
quelle
Aber warum sollten Sie dieses Skript überhaupt unter OS X haben, wo es Teil des nativen Benutzerlandes ist?
Hultner
* Als Referenz für ähnliche Funktionen * plattformübergreifende Dotfiles: github.com/westurner/dotfiles/blob/develop/scripts/pbcopy
Wes Turner
Immer noch Katzenmissbrauch und warum nicht überprüfen, ob stattdessen xclip vorhanden ist und einen Alias ​​zuweisen, wenn dies der Fall ist? Oder prüfen Sie, ob die pbpaste-Binärdatei ebenfalls vorhanden ist. Das Überprüfen des Unames scheint ein seltsamer Ansatz für das Problem zu sein.
Hultner
2
@Hultner "Das Überprüfen des Unames scheint eine seltsame Herangehensweise an das Problem zu sein." Sie können auch nach Binärdateien suchen, vorzugsweise in der Reihenfolge, ausnahmsweise mit a ${a:-${b:-${c:+${d}}}}und einigen type -P/ hasvariablen Zuweisungen und / bin / test execs.
Wes Turner
2

Diese Antwort bezieht sich auf das Linux-Subsystem für Windows.

Kurze Antwort: Verwenden Sie es so, clip.exeals ob Sie pbcopyetwas in die Windows-Zwischenablage kopieren möchten. Es ist Magie. Beispiel echo "Hello Windows" | clip.exein Ihrem Bash- oder Ubuntu-Bash-Terminal und dann "Strg-V" in einem Windows-Programm.

Mehr Kontext:

In einem obigen Kommentar habe ich erwähnt, dass es bei Verwendung von Xming unter Windows zur Aktivierung dieser Funktionalität erforderlich ist, eine DISPLAY-Variable ( export DISPLAY=:0in vielen Fällen) festzulegen , bevor die xselund xclip-Lösungen funktionieren. Es ist ärgerlich, dass diese Lösung auf unzuverlässige, stochastische Weise funktioniert. Beim Einfügen von Linux in Windows wird ctrl-vdurch ein- bis zehnmaliges Drücken die Zwischenablage (einmalig) eingefügt (dies ist in meinem Windows 10 Surface Book 2 der Fall). Verschwenden Sie nicht Ihre Zeit, verwenden Sie clip.exe.

HINWEIS: Vergessen Sie nicht die .exe. Andernfalls schlägt Ubuntu bash vor, dass Sie das Linux-Paket installieren geomview, was nicht das ist, was Sie wollen.

Scottgwald
quelle