Oft möchte ich etwas in einem Github-Bug wie posten
$ ping google.com
PING google.com (216.58.195.238): 56 data bytes
Request timeout for icmp_seq 0
64 bytes from 216.58.195.238: icmp_seq=0 ttl=53 time=1064.747 ms
Im Moment führe ich den Befehl aus, benutze screen
's C-a C-[
, um den Bereich hervorzuheben, enter
um ihn in diesen Puffer zu kopieren, in ihn einzufügen, vim
in eine Datei zu schreiben und dann cat
in pbcopy
. Es muss einen besseren Weg geben.
Gibt es einen Befehl, den ich ausführen kann, dem tee
der von mir eingegebene Befehl ein $
und die gesamte Ausgabe vorangestellt wird pbcopy
? Oder irgendetwas in der Nähe? Ich stelle mir vor
$ demo ping google.com
PING google.com (216.58.195.238): 56 data bytes
Request timeout for icmp_seq 0
64 bytes from 216.58.195.238: icmp_seq=0 ttl=53 time=1064.747 ms
^C
$
und jetzt ist das Original, das ich eingefügt habe, in meiner Mac-Zwischenablage.
command-line
clipboard
Paul Tarjan
quelle
quelle
pbcopy
und es wäre dieselbe Frage.pbcopy
undC-a C-]
loslegen.Antworten:
Eine Möglichkeit besteht darin, die Ablaufverfolgung (mit
-x
) in einer Subshell zu aktivieren, in der der Befehl ausgeführt wird. Dies schreibt den Befehl in STDERR und die Standardausgabe in STDOUT. Sammeln Sie beide und leiten Sie anpbcopy
:quelle
set -x
ist ein interessanter Ansatz. Gut erkannt!+
sein$
PS4='\\$ ${BASH_SOURCE[0]:-inherited}:line ${LINENO}:${FUNCNAME[0]:+${FUNCNAME[0]}(): } '
. Das "\\ $" macht "$" zum ersten Zeichen, und dieses Zeichen wird dann wiederholt, um die Anrufstufe anzuzeigen. ($ für die erste Ebene, $$ für die zweite Ebene usw.)Mit dem
script
Dienstprogramm können Sie die gesamte Interaktion einschließlich Ihrer Eingabeaufforderung, Ihres Befehls und ihrer Ausgabe erfassen:Sie können die Datei dann überprüfen, und ihr Inhalt befindet sich bereits in Ihrer Zwischenablage.
Du kannst auch:
quelle
$
und es ermöglicht mir, viele Befehle auszuführen, bei denen ich nur eine möchte, und es fügt eine Kopf- und Fußzeile hinzu, die ich nicht möchte.-q
. Sie können verwendensed
, um die ANSI-Codes zused -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
script temp.log env PS1='$ ' bash --norc
, um eine Bash mit der gewünschten Eingabeaufforderung zu erhalten. Alternativ können Sie Ihre bearbeiten~/.bashrc
, um die Verwendung zu überprüfenscript
und die Eingabeaufforderung zu ändern:[ $(ps -o command= -p $PPID) = 'script' ] && PS1='$ '
iterm2 verfügt über eine Shell-Integration , mit der Sie die Ausgabe des letzten Befehls mit cmd-shift-A auswählen (und automatisch kopieren) können.
quelle
Aufgrund Ihres Kommentars zu einer anderen Antwort möchten Sie nicht, dass Ihre gesamte Eingabeaufforderung kopiert wird, sondern nur
$
.Wie ich das löse, ist einfach:
Einfach. Dann benutze ich die Maus, um die gewünschte Eingabeaufforderung, den Befehl und die Ausgabe zu kopieren und einzufügen.
Für einen anderen Anwendungsfall, in dem ich nur möchte, dass der Befehl, nicht seine Ausgabe und nicht die Eingabeaufforderung, jemandem Anweisungen geben kann, habe ich einen Alias eingerichtet
zv
(in der Nähe von "Befehl V" auf der Tastatur), um den Befehl zu kopieren letzter Befehl in meine Zwischenablage :Beachten Sie die Verwendung von
printf
und die Ersetzung von Befehlen, um zu vermeiden, dass die nachfolgende neue Zeilehistory
in die Zwischenablage aufgenommen wird.quelle
Wenn Sie bereits verwenden
GNU screen
, können Sie eine Auswahl direkt mit einem externen Tool kopieren. Zum Beispiel habe ich dies~/.screenrc
unter Linux hinzugefügt :Jetzt kann ich eine Auswahl mit Control- markieren a [, drücken Spaceund jetzt drücken Control- a bum auszuführen
xsel
. Es ist nicht meine Idee, es ist eigentlich ziemlich häufig . Beachten Sie, dass einige Leute espbcopy
stattdessen verwenden,xsel
damit es problemlos für Sie funktioniert.quelle