Souvent, je veux publier quelque chose sur 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 commande, utilise screen
's C-a C-[
pour mettre la zone en surbrillance, enter
pour la copier dans ce tampon, la coller dans vim
, l'écrire dans un fichier et ensuite cat
dans pbcopy
. Il doit y avoir une meilleure façon.
Existe-t-il une commande que je peux exécuter qui sera tee
la commande que je tape préfixée avec un $
et toutes les sorties pbcopy
? Ou quelque chose de proche? J'envisage
$ 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.
command-line
clipboard
Paul Tarjan
la source
la source
pbcopy
et ce serait la même question.pbcopy
etC-a C-]
à son stdin.Réponses:
Une option consiste à activer le suivi (avec
-x
) dans un sous-shell qui exécute la commande. Cela écrit la commande dans STDERR et la sortie standard dans STDOUT. Récupérez les deux et canalisez pourpbcopy
:la source
set -x
est une approche intéressante. Bien repéré!+
être$
PS4='\\$ ${BASH_SOURCE[0]:-inherited}:line ${LINENO}:${FUNCNAME[0]:+${FUNCNAME[0]}(): } '
. Le "\\ $" fait de "$" le premier caractère, et ce caractère est ensuite répété pour montrer le niveau d'appel. ($ pour le premier niveau, $$ pour le deuxième niveau, etc.)Vous pouvez utiliser l'
script
utilitaire pour capturer l'intégralité de l'interaction, y compris votre invite, commande et sa sortie:Vous pouvez ensuite consulter le fichier et son contenu sera déjà dans votre presse-papiers.
Vous pouvez également:
la source
$
et cela me permet de faire de nombreuses commandes là où je n'en veux qu'un, et il ajoute un en-tête et un pied de page dont je ne veux pas.-q
. Vous pouvez utilisersed
poursed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
script temp.log env PS1='$ ' bash --norc
pour obtenir un bash avec l'invite souhaitée. Alternativement, vous pouvez modifier votre~/.bashrc
pour vérifier l'utilisationscript
et modifier l'invite:[ $(ps -o command= -p $PPID) = 'script' ] && PS1='$ '
iterm2 a une intégration shell qui vous permet de sélectionner (et de copier automatiquement) la sortie de la dernière commande avec cmd-shift-A.
la source
D'après votre commentaire sur une autre réponse , vous ne voulez pas que toute votre invite soit copiée, mais seulement
$
.Comment je résous ceci est simplement:
Facile. Ensuite, j'utilise la souris pour copier et coller l'invite, la commande et la sortie que je veux.
Pour un cas d'utilisation différent où je veux juste que la commande, pas sa sortie et pas l'invite, puisse donner des instructions à quelqu'un, j'ai mis en place un alias,
zv
(proche de "Command V" sur le clavier) pour copier le dernière commande dans mon presse-papiers :Notez l'utilisation de
printf
et la substitution de commandes pour éviter d'inclure la nouvelle ligne de finhistory
dans le presse-papiers.la source
Si vous l'utilisez déjà,
GNU screen
vous pouvez copier une sélection directement à l'aide d'un outil externe. Par exemple, j'ai ajouté ceci à~/.screenrc
Linux:Maintenant, je peux marquer une sélection avec Control- a [, appuyez sur Spaceet maintenant sur Control- a bpour exécuter
xsel
. Ce n'est pas mon idée, c'est en fait assez courant . Notez que certaines personnes l'utilisent avecpbcopy
au lieu dexsel
, il peut donc fonctionner sans problème pour vous.la source