Comando para pegar mi command y su salida

A menudo quiero publicar algo en un error de github como

$ 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 

Ahora ejecuto el command, uso el screen la screen Ca C-[ para resaltar el área, enter para copyrlo a ese buffer, pegarlo en vim , escribirlo en un file y luego pbcopy en pbcopy . Tiene que haber una mejor manera.

¿Hay algún command que pueda ejecutar que emita el pbcopy que pbcopy prefijado con $ y todo el resultado para pbcopy ? O algo cercano? Yo visualizo

 $ 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 $ 

y ahora lo original que pegué está en mi portapapeles mac.

Una opción es habilitar el seguimiento (con -x ) en una subshell que ejecuta el command. Esto escribe el command a STDERR y la salida estándar a STDOUT. Recoge ambos y pipa a pbcopy :

 $ ( set -x; ping -c 3 google.com ) 2>&1 | pbcopy $ pbpaste + ping -c 3 google.com PING google.com (173.194.217.138): 56 data bytes 64 bytes from 173.194.217.138: icmp_seq=0 ttl=44 time=37.436 ms 64 bytes from 173.194.217.138: icmp_seq=1 ttl=44 time=38.891 ms 64 bytes from 173.194.217.138: icmp_seq=2 ttl=44 time=39.329 ms --- google.com ping statistics --- 3 packets transmitted, 3 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 37.436/38.552/39.329/0.809 ms 

Puede utilizar la utilidad de script commands para capturar toda la interacción, incluida su request, command y su resultado:

 script temp.log; cat temp.log | pbcopy [ do stuff ] [ end the interaction with ^D or logging out of the shell ] 

Luego puede revisar el file y su contenido ya estará en su portapapeles.

Tú también puedes:

 script temp.log 'somecommand'; cat temp.log | pbcopy 

iterm2 tiene integración de shell que le permite seleccionar (y autocopyr) la salida del último command con cmd-shift-A.

De su comentario en otra respuesta , no quiere que se copie todo su post, sino solo $ .

Cómo resuelvo esto es simplemente:

 16:54:53 [myname mydirectory] 535 $ bash bash-3.2$ PS1='\$ ' $ echo some command some command $ exit exit 16:57:17 [myname mydirectory] 536 $ 

Fácil. Luego utilizo el mouse para copyr y pegar el prompt, el command y el resultado que deseo.


Para un caso de uso diferente donde solo quiero el command, no su salida y no el post, para poder dar instrucciones a alguien, he configurado un alias, zv (cerca de "Comando V" en el keyboard) para copyr el último command a mi portapapeles :

 alias zv='printf %s "$(history -p \!\!)" | pbcopy' 

Tenga en count el uso de printf y la sustitución de commands para evitar include la nueva línea final del history en el portapapeles.

Ahora ejecuto el command, use la pantalla Ca C- [para resaltar el área, intro para copyrlo a ese buffer,

Si ya usa la GNU screen , puede copyr una selección directamente usando una herramienta externa. Por ejemplo, agregué esto a ~/.screenrc en Linux:

 bind b eval writebuf 'exec /bin/sh -c " xsel -i </tmp/screen-exchange"' 'exec /bin/sh -c "killall xsel"' 

Ahora puedo marcar una selección con Controla [ , presionar Espacio y ahora presionar Controla b para ejecutar xsel . No es mi idea, en realidad es bastante común . Tenga en count que algunas personas lo usan con pbcopy lugar de xsel por lo que puede funcionar para usted sin ningún problema.