844 Stimmen

Wie kann ich die Ausgabe eines Befehls direkt in meine Zwischenablage kopieren?

Wie kann ich die Ausgabe eines Befehls in meine Zwischenablage leiten und wieder einfügen, wenn ich ein Terminal verwende? Zum Beispiel:

cat file | clipboard

0 Stimmen

Mögliche Duplikate von Leitung zu/von Zwischenablage

0 Stimmen

Mögliche Duplikate von superuser.com/questions/104981/

0 Stimmen

Ich habe gerade eine ähnliche Frage gestellt, da ich xclip nicht zum Laufen bringen kann, wenn ich mich von Git Bash unter Windows in Ubuntu einlogge: stackoverflow.com/q/60117294/470749

911voto

Legend Punkte 108634

Das wollte ich schon immer mal machen und habe jetzt eine schöne und einfache Möglichkeit gefunden, das zu tun. Ich habe das komplette Verfahren aufgeschrieben, nur für den Fall, dass jemand anderes es braucht.

Installieren Sie zunächst ein 16 kB großes Programm namens xclip :

sudo apt-get install xclip

Sie können die Ausgabe dann über die Pipeline in xclip die in die Zwischenablage kopiert werden sollen:

cat file | xclip

Um den soeben kopierten Text einzufügen, verwenden Sie:

xclip -o

Um das Leben zu vereinfachen, können Sie einen Alias in Ihrer .bashrc-Datei einrichten, wie ich es getan habe:

alias "c=xclip"
alias "v=xclip -o"

Um zu sehen, wie nützlich das ist, stelle ich mir vor, ich möchte meinen aktuellen Pfad in einem neuen Terminalfenster öffnen (es gibt vielleicht andere Möglichkeiten, wie Ctrl + T auf einigen Systemen, aber dies dient nur zur Veranschaulichung):

Terminal 1:
pwd | c

Terminal 2:
cd `v`

Beachten Sie die ` ` um v . Dies führt aus v zuerst als Befehl und ersetzt ihn dann anstelle von cd zu verwenden.

Kopieren Sie den Inhalt nur in den X Zwischenablage

cat file | xclip

Wenn Sie an einer anderen Stelle als einer X Anwendung, versuchen Sie diese:

cat file | xclip -selection clipboard

224 Stimmen

"cat file | xclip" kopiert den Inhalt nur in die X-Zwischenablage. Wenn Sie den Inhalt woanders als in einer X-Anwendung einfügen wollen, versuchen Sie dies: "cat file | xclip - Auswahl Zwischenablage"

10 Stimmen

Ihre Wahl des Griffs ist angemessen!

4 Stimmen

Wenn Sie das Zeilenumbruchszeichen entfernen möchten, damit Sie das Ergebnis von "pwd | c" direkt einfügen und bearbeiten können, können Sie "pwd | tr -d ' \n ' | xclip -selection c"

308voto

DavidPhillipOster Punkte 3735

Unter OS X verwenden Sie pbcopy ; pbpaste geht in die entgegengesetzte Richtung.

pbcopy < .ssh/id_rsa.pub

18 Stimmen

Juhu! So wie hier zum Beispiel: pbcopy < .ssh/id_rsa.pub

2 Stimmen

Funktioniert jedoch nicht bei der Befehlsausgabe - z. B. pbcopy < git merge-base master some-branch

0 Stimmen

Wenn Sie tmux verwenden, wird es nicht funktionieren, es sei denn, Sie schließen Ihre Sitzung wieder an: superuser.com/a/413233/146254

113voto

Bruno Bronosky Punkte 60135

Ich habe ein Tool für Linux/OSX/Cygwin entwickelt, das einigen dieser Tools ähnelt, aber etwas einzigartig ist. Ich nenne es cb y Es kann in diesem github gist gefunden werden .

In diesem Gist zeige ich, wie man Kopieren und Einfügen per Kommandozeile unter Linux, macOS und Cygwin durchführt.

Linux

_copy(){
    cat | xclip -selection clipboard
}

_paste(){
    xclip -selection clipboard -o
}

macOS

_copy(){
    cat | pbcopy
}

_paste(){
    pbpaste
}

Cygwin

_copy(){
    cat > /dev/clipboard
}

_paste(){
    cat /dev/clipboard
}

Anmerkung: Ursprünglich wollte ich dies nur in meinem Kommentar zu Bob Enohp's Antwort . Aber dann wurde mir klar, dass ich eine README zu meinem Gist hinzufügen sollte. Da der Gist-Editor keine Markdown-Vorschau bietet, habe ich das Antwortfeld hier verwendet und nach dem Kopieren/Einfügen in meinen Gist gedacht: "Ich könnte die Antwort auch einreichen." Wenn Sie über Funktionalität/Fehler diskutieren möchten wäre es wahrscheinlich am besten, dies in der Kommentare für das Wesentliche auf Github.

cb

Ein auslaufsicheres T-Stück für die Zwischenablage

Dieses Skript ist angelehnt an tee (ver man tee ).

Es ist wie Ihre normalen Kopier- und Einfügebefehle, aber vereinheitlicht und in der Lage zu erkennen, wann Sie es verkettbar machen wollen

Beispiele

Kopieren

$ date | cb
# clipboard contains: Tue Jan 24 23:00:00 EST 2017

Kleister

# clipboard retained from the previous block
$ cb
Tue Jan 24 23:00:00 EST 2017
$ cb | cat
Tue Jan 24 23:00:00 EST 2017
$ cb > foo
$ cat foo
Tue Jan 24 23:00:00 EST 2017

Verkettung

$ date | cb | tee updates.log
Tue Jan 24 23:11:11 EST 2017
$ cat updates.log
Tue Jan 24 23:11:11 EST 2017
# clipboard contains: Tue Jan 24 23:11:11 EST 2017

Kopieren über Datei-Umleitung

(chronologisch gesehen war es sinnvoll, dies am Ende zu zeigen)

# clipboard retained from the previous block
$ cb < foo
$ cb
Tue Jan 24 23:00:00 EST 2017
# note the minutes and seconds changed from 11 back to 00

1 Stimmen

Dies funktionierte perfekt für mich, um eine Befehlsausgabe in die Zwischenablage im Terminal auf macOS zu kopieren, danke!

0 Stimmen

Eine Lösung für alle Fälle! Vielen Dank, hat bei mir unter MacOS funktioniert - ich werde es auch unter Linux testen

0 Stimmen

Es bleibt beim Ausführen des Verkettungsbeispiels in Ubuntu 18.04 hängen. Die Tests zeigen das gleiche Verhalten, versuchte Ausführung cb --test und es bleibt bei der Änderungsprüfung hängen.

54voto

Bob Enohp Punkte 1232

Ich habe dieses kleine Skript geschrieben, mit dem man die Befehle zum Kopieren und Einfügen nicht mehr erraten muss.

Die Linux-Version des Skripts setzt voraus, dass xclip bereits auf Ihrem System installiert ist. Das Skript heißt Clipboard.

#!/bin/bash
# Linux version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard     # Pipe someapp's output into clipboard
#        clipboard | someapp     # Pipe clipboard's content into someapp
#

if command -v xclip 1>/dev/null; then
    if [[ -p /dev/stdin ]] ; then
        # stdin is a pipe
        # stdin -> clipboard
        xclip -i -selection clipboard
    else
        # stdin is not a pipe
        # clipboard -> stdout
        xclip -o -selection clipboard
    fi
else
    echo "Remember to install xclip"
fi

Die OS X-Version des Skripts stützt sich auf pbcopy und pbpaste, die auf allen Macs vorinstalliert sind.

#!/bin/bash
# OS X version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard     # Pipe someapp's output into clipboard
#        clipboard | someapp     # Pipe clipboard's content into someapp
#

if [[ -p /dev/stdin ]] ; then
    # stdin is a pipe
    # stdin -> clipboard
    pbcopy
else
    # stdin is not a pipe
    # clipboard -> stdout
    pbpaste
fi

Die Verwendung des Skripts ist sehr einfach, da Sie einfach eine Pipeline in oder aus der clipboard wie in diesen beiden Beispielen gezeigt.

$ cat file | clipboard

$ clipboard | less

4 Stimmen

Ich verwende die Namen pbcopy y pbpaste auf Linux, so dass es sowohl für Linux als auch für OS X funktioniert.

0 Stimmen

Damit das Skript global in Ubuntu funktioniert: * Speichern Sie es unter ~/.scripts/clipboard * Ausführbar machen chmod +x ~/.scripts/clipboard für Bash: * add export PATH=$PATH:~/.scripts bis zum Ende von ~/.bashrc für Fisch: * hinzufügen set PATH ~/.scripts $PATH à ~/.config/fish/fish.config Wenn eine der Dateien oder ein Ordner noch nicht vorhanden ist, legen Sie sie einfach an.

2 Stimmen

Sie können dieses Skript auch als Funktion verpacken clipboard(){ ... } und fügen Sie sie in .bashrc ein

52voto

winklerrr Punkte 9251

Linux, macOS, Windows (WSL/CYGWIN)

Jedes dieser Systeme verwendet ein eigenes Tool, um die Zwischenablagefunktionalität in die Datenbank zu integrieren. Befehlszeilenschnittstelle (CLI). Das bedeutet, dass bei der Verwendung von Ubuntu CLI auf Windows Subsystem for Linux (WSL) die üblichen xclip Lösung wird nicht funktionieren. Das Gleiche gilt für macOS.

Die folgende Tabelle gibt einen Überblick über die auf den verschiedenen Systemen benötigten Kopier-/Einfügewerkzeuge:

OS

Kopieren

Kleister

WSL

clip.exe

powershell.exe Get-Clipboard

CYGWIN

> /dev/clipboard

cat /dev/clipboard

macOS

pbcopy

pbpaste

Linux

xclip -sel clip

xclip -sel clip -o

Vereinheitlicht .bashrc Lösung

Fügen Sie einfach den folgenden Code in Ihr ~/.bashrc um die Verwendung von copy y paste auf allen Systemen. Die Lösung funktioniert sowohl auf "normalen" Linux-Systemen (z. B. Ubuntu, Debian) als auch auf WSL und macOS:

if grep -q -i microsoft /proc/version; then
  # on WSL: version contains the string "microsoft"
  alias copy="clip.exe"
  alias paste="powershell.exe Get-Clipboard"
elif grep -q -i cygwin $(uname -a); then
  # on CYGWIN: uname contains the string "cygwin"
  alias copy="/dev/clipboard"
  alias paste="cat /dev/clipboard"
elif [[ ! -r /proc/version ]]; then
  # on MAC: version is not readable at all
  alias copy="pbcopy"
  alias paste="pbpaste"
else
  # on "normal" linux
  alias copy="xclip -sel clip"
  alias paste="xclip -sel clip -o"
fi

Verwendung auf ALLEN Systemen

Zum Kopieren:

# pipe
echo "hello world" | copy

# or for direct file input
copy < file

Zum Einfügen:

paste > file

3 Stimmen

Dies sollte ein ZSH-Plugin sein!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X