Często chcę coś opublikować na błędzie github
$ 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
W tej chwili uruchamiam polecenie, użyj screen
, C-a C-[
aby podświetlić obszar, enter
skopiować go do tego bufora, wkleić do vim
, zapisać do pliku, a następnie cat
do pbcopy
. Musi być lepszy sposób.
Czy istnieje polecenie, które mogę uruchomić, do którego wpisuję tee
polecenie poprzedzone a $
i wszystkimi danymi wyjściowymi pbcopy
? A może coś bliskiego? Wyobrażam sobie
$ 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
$
a teraz oryginalna rzecz, którą wkleiłem, znajduje się w moim schowku Mac.
command-line
clipboard
Paul Tarjan
źródło
źródło
pbcopy
i to samo pytanie.pbcopy
iC-a C-]
do jego standardowego wejścia.Odpowiedzi:
Jedną z opcji jest włączenie śledzenia (z
-x
) w podpowłoce, która uruchamia polecenie. Spowoduje to zapisanie polecenia do STDERR, a standardowe wyjście do STDOUT. Zbierz oba i potokujpbcopy
:źródło
set -x
to ciekawe podejście. Dobrze zauważony!+
być$
PS4='\\$ ${BASH_SOURCE[0]:-inherited}:line ${LINENO}:${FUNCNAME[0]:+${FUNCNAME[0]}(): } '
. „\\ $” czyni „$” pierwszym znakiem, a następnie ten znak jest powtarzany, aby pokazać poziom wywołania. ($ za pierwszy poziom, $$ za drugi poziom itp.)Za pomocą tego
script
narzędzia można przechwycić całą interakcję, w tym monit, polecenie i jego wynik:Następnie możesz przejrzeć plik, a jego zawartość będzie już w schowku.
Możesz też:
źródło
$
i pozwala mi wykonywać wiele poleceń tam, gdzie chcę tylko jedno, i dodaje nagłówek i stopkę, których nie chcę.-q
. Możesz użyćsed
do usunięcia kodów ANSI:sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
script temp.log env PS1='$ ' bash --norc
aby uzyskać bash z żądanym monitem. Alternatywnie możesz edytować swój,~/.bashrc
aby sprawdzić użyciescript
i zmienić monit:[ $(ps -o command= -p $PPID) = 'script' ] && PS1='$ '
iterm2 ma integrację z powłoką, która pozwala wybrać (i automatycznie kopiować) dane wyjściowe ostatniego polecenia za pomocą cmd-shift-A.
źródło
Na podstawie komentarza do innej odpowiedzi nie chcesz, aby cały monit był kopiowany, ale tylko
$
.Jak to rozwiązać, po prostu:
Łatwy. Następnie używam myszy do kopiowania i wklejania żądanego polecenia, polecenia i danych wyjściowych.
W innym przypadku użycia, w którym po prostu chcę, aby polecenie, a nie jego wynik, a nie monit, było w stanie przekazać komuś instrukcje, ustawiłem alias
zv
(blisko „Command V” na klawiaturze), aby skopiować ostatnie polecenie do mojego schowka :Zwróć uwagę na użycie
printf
i zastępowanie poleceń, aby uniknąć włączenia końcowego znaku nowej liniihistory
do schowka.źródło
Jeśli już używasz
GNU screen
, możesz skopiować zaznaczenie bezpośrednio za pomocą zewnętrznego narzędzia. Na przykład dodałem to do~/.screenrc
systemu Linux:Teraz mogę zaznaczyć wybór za pomocą Control- a [, naciśnij, Spacea teraz naciśnij Control-, a baby uruchomić
xsel
. To nie jest mój pomysł, to właściwie dość powszechne . Pamiętaj, że niektóre osoby używają gopbcopy
zamiast,xsel
więc może działać dla Ciebie bez żadnych problemów.źródło