Muitas vezes, quero postar algo em um bug do 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
No momento, eu executo o comando, use screen
s C-a C-[
para destacar a área, enter
copiá-lo para esse buffer, colá-lo vim
, gravá-lo em um arquivo e depois cat
em pbcopy
. Tem que haver uma maneira melhor.
Existe um comando que eu possa executar e tee
o comando que eu digitar prefixo com ae $
toda a saída para pbcopy
? Ou algo próximo? Eu imagino
$ 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
$
e agora a coisa original que colei está na minha área de transferência do mac.
command-line
clipboard
Paul Tarjan
fonte
fonte
pbcopy
e seria a mesma pergunta.pbcopy
eC-a C-]
ao seu estilo.Respostas:
Uma opção é ativar o rastreio (com
-x
) em um subshell que executa o comando. Isso grava o comando em STDERR e a saída padrão em STDOUT. Colete os dois e canalize parapbcopy
:fonte
set -x
é uma abordagem interessante. Bem manchado!+
de ser$
PS4='\\$ ${BASH_SOURCE[0]:-inherited}:line ${LINENO}:${FUNCNAME[0]:+${FUNCNAME[0]}(): } '
. O "\\ $" torna "$" o primeiro caractere, e esse caractere é repetido para mostrar o nível da chamada. ($ para o primeiro nível, $$ para o segundo nível, etc.)Você pode usar o
script
utilitário para capturar toda a interação, incluindo seu prompt, comando e sua saída:Você pode revisar o arquivo e seu conteúdo já estará na sua área de transferência.
Você também pode:
fonte
$
e ele me permite executar muitos comandos, onde eu quero apenas um, e adiciona um cabeçalho e rodapé que eu não quero.-q
. Você pode usarsed
para remover os códigos ANSI:sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
script temp.log env PS1='$ ' bash --norc
para obter um bash com o prompt que deseja. Como alternativa, você pode editar o seu~/.bashrc
para verificar o usoscript
e alterar o prompt:[ $(ps -o command= -p $PPID) = 'script' ] && PS1='$ '
O iterm2 possui integração de shell que permite selecionar (e copiar automaticamente) a saída do último comando com cmd-shift-A.
fonte
Do seu comentário sobre outra resposta , você não deseja que todo o prompt seja copiado, mas apenas
$
.Como eu resolvo isso é simplesmente:
Fácil. Então eu uso o mouse para copiar e colar o prompt, comando e saída que eu quero.
Para um caso de uso diferente, no qual eu apenas quero que o comando, não sua saída e não o prompt, seja capaz de dar instruções a alguém, configurei um alias
zv
(perto de "Comando V" no teclado) para copiar o último comando para minha área de transferência :Observe o uso de
printf
e substituição de comando para evitar a inclusão da nova linha à direitahistory
na área de transferência.fonte
Se você já usa,
GNU screen
pode copiar uma seleção diretamente usando uma ferramenta externa. Por exemplo, eu adicionei isso~/.screenrc
no Linux:Agora posso marcar uma seleção com Control- a [, pressione Spacee agora pressione Control- a bpara executar
xsel
. Não é minha ideia, é realmente bastante comum . Observe que algumas pessoas o usam com ele empbcopy
vez dexsel
fazê-lo funcionar sem problemas.fonte