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 Control – a [ , pressez Space et maintenant appuyez sur Control – a 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.