Commande pour coller ma command et sa sortie

Souvent, je veux postr quelque chose à un bug github comme

$ 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 

En ce moment j'exécute la command, utilise Ca C-[ pour mettre en surbrillance la zone, enter pour la copyr dans la memory tampon, collez-la dans vim , écrivez-la dans un file, puis pbcopy dans pbcopy . Il doit y avoir une meilleure façon.

Existe-t-il une command que je peux exécuter qui va tee la command que je tape préfixée avec un $ et toute la sortie à pbcopy ? Ou quelque chose de proche? J'imagine

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

et maintenant la chose originale que j'ai collée est dans mon presse-papiers mac.

Une option est d'activer le suivi (avec -x ) dans un sous-shell qui exécute la command. Cela écrit la command à STDERR et la sortie standard à STDOUT. Collecte les deux et pipe à 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-sortingp min/avg/max/stddev = 37.436/38.552/39.329/0.809 ms 

Vous pouvez utiliser l'utilitaire de script pour capturer l'set de l'interaction, y compris votre invite, la command et sa sortie:

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

Vous pouvez ensuite consulter le file, et son contenu sera déjà dans votre presse-papiers.

Vous pouvez aussi:

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

iterm2 a une intégration shell qui vous permet de sélectionner (et de copyr automatiquement) la sortie de la dernière command avec cmd-shift-A.

De votre commentaire sur une autre réponse , vous ne voulez pas que l' intégralité de votre message soit copié, mais seulement $ .

Comment je résous ceci est simplement:

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

Facile. Ensuite, j'utilise la souris pour copyr et coller l'invite, la command et la sortie que je veux.


Pour un cas d'utilisation différent où je veux simplement que la command, et non la sortie, et non l'invite, pour pouvoir donner des instructions à quelqu'un, j'ai mis un alias, zv (près de "Command V" sur le keyboard) pour copyr la dernière command à mon presse-papier :

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

Notez l'utilisation de printf et de substitution de command pour éviter d'inclure la nouvelle ligne de return de l' history dans le presse-papiers.

En ce moment, j'exécute la command, utilise l'écran Ca C- [pour mettre en surbrillance la zone, entrer pour la copyr dans cette zone tampon,

Si vous utilisez déjà l' GNU screen vous pouvez copyr une sélection directement à l'aide d'un outil externe. Par exemple, j'ai ajouté ceci à ~/.screenrc sous Linux:

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

Maintenant, je peux marquer une sélection avec Controla [ , pressez Space et maintenant appuyez sur Controla b pour exécuter xsel . Ce n'est pas mon idée, c'est en fait assez commun . Notez que certaines personnes l'utilisent avec pbcopy au lieu de xsel afin qu'il puisse fonctionner pour vous sans aucun problème.