it-swarm.com.de

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

Wie kann ich die Ausgabe eines Befehls in meine Zwischenablage leiten und bei Verwendung eines Terminals wieder einfügen? Zum Beispiel:

cat file | clipboard
388
Legend

Ich wollte das schon immer machen und fand einen schönen und einfachen Weg, es zu machen. Ich habe das gesamte Verfahren aufgeschrieben, falls es jemand anderes benötigt.

Installieren Sie zuerst ein 16-kB-Programm mit dem Namen xclip:

Sudo apt-get install xclip

Sie können die Ausgabe dann in xclip umleiten, um sie in die Zwischenablage zu kopieren:

cat file | xclip

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

xclip -o

Um das Leben zu vereinfachen, können Sie wie folgt einen Alias ​​in Ihrer .bashrc-Datei einrichten:

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

Stellen Sie sich vor, Sie möchten meinen aktuellen Pfad in einem neuen Terminalfenster öffnen, um zu sehen, wie nützlich dies ist Ctrl+T auf einigen Systemen, aber dies ist nur zur Veranschaulichung):

Terminal 1:
pwd | c

Terminal 2:
cd `v`

Beachten Sie den ` ` um v. Dadurch wird v zuerst als Befehl ausgeführt und dann anstelle von cd eingesetzt.

Kopieren Sie den Inhalt nur in die Zwischenablage von X

cat file | xclip

Wenn Sie eine andere Stelle als X einfügen möchten, versuchen Sie Folgendes:

cat file | xclip -selection clipboard
504
Legend

Verwenden Sie unter OS X pbcopy; pbpaste geht in die entgegengesetzte Richtung.

138

Ich habe dieses kleine Skript geschrieben, mit dem die Copy/Paste-Befehle erraten werden.

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

#!/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 basiert 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 die Variable clipboard wie in diesen beiden Beispielen gezeigt ein- oder ausleiten.

$ cat file | clipboard

$ clipboard | less
40
Bob Enohp

Ich habe ein Tool für Linux/OSX/Cygwin entwickelt, das einigen dieser anderen ähnelt, jedoch etwas einzigartig ist. Ich nenne es cb und es kann in diesem Github Gist gefunden werden.

In diesem Kapitel demonstriere ich, wie Sie das Kopieren und Einfügen über die Befehlszeile unter Linux, macOS und Cygwin ausführen.

Linux

_copy(){
    cat | xclip -selection clipboard
}

_paste(){
    xclip -selection clipboard -o
}

mac OS

_copy(){
    cat | pbcopy
}

_paste(){
    pbpaste
}

Cygwin

_copy(){
    cat > /dev/clipboard
}

_paste(){
    cat /dev/clipboard
}

Hinweis: Ursprünglich wollte ich dies nur in meinem Kommentar zu der Antwort von Bob Enohp erwähnen. Aber dann wurde mir klar, dass ich meiner Gist ein README hinzufügen sollte. Da der Gist-Editor keine Markdown-Vorschau anbietet, habe ich das Antwortfeld hier verwendet und nach dem Kopieren/Einfügen in meinen Gist-Gedanken dachte ich: "Ich kann die Antwort auch gut einreichen."

cb

Ein auslaufsicheres T-Shirt in die Zwischenablage

Dieses Skript ist nach tee modelliert (siehe man tee ).

Es ist wie Ihre normalen Befehle zum Kopieren und Einfügen, aber einheitlich und in der Lage zu erkennen, wann es kettenbar sein soll

Beispiele

Kopieren

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

Einfügen

# 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 Dateiumleitung

(chronologisch machte es Sinn, dies am Ende zu demonstrieren)

# 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
38
Bruno Bronosky

Fügen Sie dies zu Ihrem ~/.bashrc hinzu:

# Now `cclip' copies and `clipp' pastes'
alias cclip='xclip -selection clipboard'
alias clipp='xclip -selection clipboard -o'

Nun clip p einfügen und c clip kopieren - aber du kannst auch schickere Sachen machen:

clipp | sed 's/^/    /' | cclip

↑ rückt die Zwischenablage ein; Gut für Sites ohne Stapelüberlauf { } Taste

Sie können es hinzufügen, indem Sie Folgendes ausführen:

printf "\nalias clipp=\'xclip -selection c -o\'\n" >> ~/.bashrc
printf "\nalias cclip=\'xclip -selection c -i\'\n" >> ~/.bashrc
20
user3276552

Ich verwende Parcellite und xsel, um die letzte Commit-Nachricht von git in meinen Zwischenablagen-Manager zu kopieren (aus irgendeinem Grund funktioniert xclip nicht):

$ git log -1 --pretty=%B | xsel -i -b
7

Wenn Sie keine externen Tools verwenden, ist dies ein relativ einfacher Befehl, wenn Sie eine Verbindung zur Serversicht SSH herstellen:

Von einer Windows 7+-Eingabeaufforderung:

ssh [email protected] cat /etc/passwd | clip

Dadurch wird der Inhalt der Remote-Datei in Ihrer lokalen Zwischenablage gespeichert.

(Für den Befehl muss Pageant für den Schlüssel ausgeführt werden. Andernfalls werden Sie nach einem Kennwort gefragt.)

5
d.raev

In Linux mit installiertem xclip:

xclip - Auswahl Zwischenablage <Datei

3
tristobal

Ich habe ein kleines Tool erstellt, das ähnliche Funktionen bietet, ohne xclip oder xsel zu verwenden. stdout wird in eine Zwischenablage kopiert und kann im Terminal wieder eingefügt werden. Sehen:

https://sourceforge.net/projects/commandlinecopypaste/

Beachten Sie, dass dieses Tool keine X-Sitzung benötigt. Die Zwischenablage kann nur im Terminal verwendet werden und muss nicht eingefügt werden Ctrl+V oder klicken Sie mit der mittleren Maustaste in andere X-Fenster.

3
Dirk Duschinger

Wenn Sie bash verwenden, das auf Ihrem Windows-System installiert ist (bekannt als Windows-Subsystem für Linux (WSL)), wird beim Versuch, xclip zu verwenden, ein Fehler ausgegeben:

Error: Can't open display: (null)

Denken Sie stattdessen daran, dass das Linux-Subsystem Zugriff auf ausführbare Windows-Dateien hat. Es ist möglich, clip.exe wie zu verwenden

echo hello | clip.exe

hiermit können Sie den Befehl Einfügen (Strg-V) verwenden.

0
DFeng

Ich komme aus einem abgespeckten KDE-Hintergrund und habe keinen Zugriff auf xclip, xsel oder das andere schicke Zeug. Ich habe eine TCSH-Konsole, um die Sache noch schlimmer zu machen.

Voraussetzungen: qdbusklipperxargsbash

Erstellen Sie eine ausführbare Bash-Datei foo.sh.

#!/bin/bash
qdbus org.kde.klipper /klipper setClipboardContents "$1" > /dev/null

Hinweis: Dies muss bash sein, da TCSH keine mehrzeiligen Argumente unterstützt.

Gefolgt von einem TCSH-Alias ​​im.cshrc.

alias clipboard xargs -0 /path/to/foo

Erklärung:

xargs -0 leitet stdin in ein einzelnes Argument. Dieses Argument wird an die ausführbare Bash-Datei übergeben, die eine Anforderung zum Kopieren in die Zwischenablage an klipper mit qdbus sendet. Die Pipe an /dev/null gibt das von qdbus zurückgegebene Zeilenvorschubzeichen nicht an die Konsole aus.

Verwendungsbeispiel:

ls | clipboard

Dadurch wird der Inhalt des aktuellen Ordners in die Zwischenablage kopiert. 

Hinweis: Funktioniert nur als Pfeife. Verwenden Sie die ausführbare Bash-Datei direkt, wenn Sie ein Argument kopieren müssen.

0
Ryan Dsouza

Basierend auf früheren Beiträgen erhielt ich die folgende Light-Weight-Alias-Lösung, die zu .bashrc hinzugefügt werden kann:

if [ -n "$(type -P xclip)" ]
then
  alias xclip='xclip -selection clipboard'
  alias clipboard='if [ -p /dev/stdin ]; then xclip -in; fi; xclip -out'
fi

Beispiele:

# Copy
$ date | clipboard
Sat Dec 29 14:12:57 PST 2018

# Paste
$ date
Sat Dec 29 14:12:57 PST 2018

# Chain
$ date | clipboard | wc
   1       6      29
0
kornieff

Nur um einen Edge-Fall zu behandeln :) und weil der Fragentitel (zumindest jetzt) ​​fragt, wie die Ausgabe eines Befehls direkt in die Zwischenablage kopiert werden soll.

Oft finde ich es nützlich, die Ausgabe des Befehls zu kopieren, nachdem sie bereits ausgeführt wurde, und ich möchte oder kann den Befehl nicht erneut ausführen.

Für dieses Szenario können wir entweder gdm oder ein ähnliches Mausprogramm verwenden und mit der Maus auswählen. apt-get install gdm und dann entweder mit der rechten Maustaste oder mit den Tastenkombinationen Strg + Umschalt + c und Strg + Umschalt + v kopieren und in das Terminal einfügen

Oder, was für mich die bevorzugte Methode ist (da die Maus in einem Bereich nicht richtig auswählen kann, wenn Sie mehrere Bereiche nebeneinander haben und mehr als eine Zeile auswählen müssen), können wir mit tmux mit dem Standard in den tmux-Puffer kopieren [ Leertaste, bewegen, um auszuwählen, einzugeben, oder Sie können einen Codeblock auswählen. Dies ist auch besonders nützlich, wenn Sie sich in einer der Spuren des Cli-Multiplexers wie tmux befinden UND Sie eine Reihe von Text auswählen müssen, aber nicht die Zeilennummern (mein vim-Setup gibt die Zeilennummern wieder).

Danach können Sie den Befehl verwenden:

tmux save-buffer - | xclip -i

Sie können es natürlich als Alias ​​für etwas verwenden, das Ihnen gefällt, oder direkt in der tmux-Konfigurationsdatei binden

Dies ist nur eine konzeptionelle Antwort, um diesen Edge-Fall abzudecken, wenn es nicht möglich ist, den Befehl erneut auszuführen. Wenn Sie spezifischere Codebeispiele benötigen, lassen Sie es mich wissen

Prost

0