Usando texto da saída dos comandos anteriores

16

EDITAR abril de 2015: Se você tiver essa mesma pergunta, recomendo também verificar http://xiki.org/


Eu sei que não é assim que os terminais funcionam, mas geralmente me vejo desejando que exista uma maneira fácil de usar texto (copiá-lo, modificá-lo etc.) que já esteja no histórico da janela do terminal a partir de alguma saída de comando anterior.

Eu imaginei assim:

Estou no meu shell bash prestes a inserir um comando e percebo que preciso digitar algo que já esteja na tela algumas linhas acima. Posso pegar o mouse e selecioná-lo, mas odeio isso. O que realmente desejo neste momento é que todo o meu terminal se torne um buffer gigante do Vim, tudo isso: os prompts, os comandos que digitei e a saída desses comandos. Tudo. E então eu pulei algumas linhas, talvez edite um pouco e puxe um pouco de texto. Em seguida, retorne ao modo bash shell e cole o que eu puxei na linha de comando atual.

Eu sei que existem algumas opções:

  • Naturalmente, canalize o texto que eu preciso diretamente da saída de algum comando para um arquivo ou direto para o próximo comando. Mas para isso você deve planejar antecipadamente ou reexecutar o comando do seu histórico (supondo que a saída não mude entre as invocações).

  • Para alcançar o mouse e selecione o texto a copiar. Manco, irritante, eu gostaria de não ter feito isso (este não é o site de troca de pilha da GUI, é? =)

  • Para usar a opção "Exportar texto como ..." do meu aplicativo de terminal (Mac OS X) e salvar o texto do terminal em um arquivo. Em seguida, abra o arquivo e trabalhe com ele. Quase, mas por que executar a etapa de salvar em um arquivo em disco?

Então a pergunta é: O que você faz nessa situação? Existe algum truque, ferramenta, recurso de shell que possa ser útil nesse cenário? Você se resigna a usar o mouse ou redigitar o que precisar digitar?

Pode ser que o problema seja que eu não estou fazendo as coisas 'da maneira unix', mas vamos lá, é 2010 e não consigo copiar facilmente algum texto a algumas linhas do meu cursor?

Sergio Acosta
fonte
11
Consulte também Como reutilizar a última saída da linha de comando? .
Gilles 'SO- stop be evil'
stackoverflow.com/questions/5955577/…
Ciro Santilli é o nome de Ciro Santilli em

Respostas:

4

Você pode usar o script (use -f para garantir que ele libere todas as vezes) e pode ter toda a saída em um arquivo.

Use um multiplexador de terminal (tela, tmux etc.). Por exemplo, para a tela http://web.mit.edu/gnu/doc/html/screen_11.html#

Comando: cópia Entre no modo de cópia / rolagem. Isso permite copiar o texto da janela atual e seu histórico no buffer de colagem. Nesse modo, um editor de tela cheia do tipo vi está ativo, com os controles descritos abaixo.

Outros multiplexadores de terminal certamente possuem recursos mais avançados.

nc3b
fonte
Está bem. Acabei de saber que um 'Terminal Multiplexer' é provavelmente o que eu preciso. Obrigado. Além disso, obrigado pela dica de comando 'script'.
Sergio Acosta
5

No tmux (um multiplexador de terminal), você pode pressionar Ctrl + A- [para alternar para o modo de buffer Vi, onde você pode navegar pela tela, rolar o buffer para frente e para trás, copiar texto etc. O atalho padrão é realmente Ctrl + B- [mas obviamente era para ser reconfigurado. Além disso, o modo de buffer padrão é o Emacs, mas você pode configurá-lo para o Vi.

Confira o tmux, é realmente um ótimo multiplexador de terminal moderno. Além de trabalhar com o buffer, você pode dividir a tela em várias janelas, conectar-se à mesma sessão a partir de vários terminais, etc.

No OpenBSD, o tmux tornou-se parte do sistema base.

Veja a página de manual do tmux para mais detalhes. Veja também as capturas de tela em http://tmux.sourceforge.net/

zvolkov
fonte
tmux é o mais legal!
Gabe.
4

No emacs, o Mx shell manipula a edição da saída anterior. Você pode copiar e colar facilmente a saída de comandos anteriores ou qualquer parte do seu buffer, como um buffer comum. Tenho certeza de que deve haver um equivalente ao vim.

elmarco
fonte
11
Isso está muito próximo do que eu quero, mas eu preciso estar no Emacs ou no Vim. +1
Sergio Acosta
Sim, poderia ser o seu termo padrão + shell. :) Em seguida, você usaria as teclas normais de navegação de texto lá, no mínimo. Se você aprendeu mais teclas especiais, os seguintes recursos do Emacs ' eshellpodem ser acessados .
IMZ - Ivan Zakharyaschev
1

Como mencionado aqui, o Emacs ' eshellpode ser seu termo padrão + shell. :) Em seguida, você usaria as teclas normais de navegação de texto lá, no mínimo. Se você aprendeu mais teclas especiais, os seguintes recursos do Emacs ' eshellpodem ser acessados:

imz - Ivan Zakharyaschev
fonte
1

Tente usar o vim como sua CLI? Basta selecionar a saída de algumas linhas e passar por:!.

Stephen M. Webb
fonte
Me desculpe, eu não sigo você. Você pode elaborar, por favor?
roaima