Ao disparar comandos na CLI, quero copiar o comando que acabei de disparar ou qualquer coisa que escrevi no terminal e colá-lo em outro lugar sem usar o mouse.
Como na figura a seguir, quero copiar o comando update (total ou parcialmente) sem usar o mouse e colá-lo em algum lugar.
terminal
gnome-terminal
copy-paste
prayagupd
fonte
fonte
Respostas:
Você pode usar
screen(1)
dentro do seu emulador de terminal de escolha (xterm
,gnome-terminal
...).A funcionalidade de que você precisa está integrada
screen
. Você precisa se familiarizar com o modo como funciona:Você pode "copiar" o comando e "colar" em outro terminal.
screen
é divertido e, quando você começar a usá-lo, se perguntará como é possível que você não o tenha usado.fonte
screen
comando, instalei-o no gnome-terminal e inicieiscreen
em um terminal. Mas não foi possível começar a partir daí. Também não entendi o que você quer dizer com tela embutida.man screen
. Além disso, eu escrevi 'built-in na tela', ou seja, o copiar / colar funcionalidade está presente emscreen
pelo projeto .space
tecla para selecionar a área desejada. Você precisa usarY
para copiar a linha inteira ou a área desejada. Tela évi
amigável movimentos.AltGr
chave? Eu tenhoAlt
screen
ferramenta não funciona foi explicada aqui. E não parece fornecer uma resposta para a pergunta.Além das respostas já fornecidas, você pode considerar mudar para um emulador de terminal mais flexível.
Se você estava preparado para alterar os terminais para rxvt-unicode , poderia usar uma ferramenta como urxvt-perls : uma coleção de scripts que fornecem a seguinte funcionalidade de teclado nesse emulador de terminal:
Você simplesmente instala o pacote e adiciona algumas linhas ao seu
~/.Xresources
, e pode desconectar o roedor para sempre.fonte
Você pode fazer isso usando um programa como
xclip
:Depois de instalá-lo, você pode usá-lo para conectar-se à sua área de transferência. Infelizmente, isso não funcionará no seu
mysql
ambiente (ele possui seu próprio buffer para linhas copiadas), mas funcionará se você quiser executar um comando 'normal'. Por exemplo :Digite CtrlApara ir para o início da linha, coloque o comando entre aspas e faça o eco dele:
Agora você tem "Esta é uma longa linha de comando" na área de transferência do clique do meio.
Se você deseja colar sem usar o mouse, isso dependerá de onde você está colando. Você pode colar em outro terminal executando:
Você pode colar no mesmo terminal, simplesmente matando (cortando) o comando CtrlKe colando-o CtrlY.
Você também pode salvar comandos nos terminais usando o histórico do bash. Adicione esta linha ao seu
~/.bashrc
:PROMPT_COMMAND
é uma variável especial do bash. Se estiver definido, o valor será executado como um comando antes de emitir um novo prompt.history -a
gravará o histórico da sessão atual no arquivo de histórico ehistory -r
recarregará esse arquivo. Isso significa que todos os comandos que você executar serão gravados imediatamente no arquivo de histórico.Agora, quando você executa uma longa linha de comando, pode alternar para outro terminal e pressionar return (apenas para executar
$PROMT_COMMAND
, alternativamente, abrir uma nova janela do terminal) e estará acessível ao histórico desse terminal. Se você acertar, Uppode executá-lo no novo terminal.fonte
$ xclip -o
que não é o que eu quero, porque apenas imprime o que euxclipe
d. Mas +1 paraCtrl+A
seguido deCtrl+K
eCtrl+Y
para recortar e colar no mínimo no mesmo terminal.O @evilsoup sugeriu uma boa solução, mas é interrompido com frequência.
Uma solução rápida
Aqui está uma solução que nunca quebra .
Basta executar este comando e ele copiará o comando que você acabou de executar na área de transferência.
Basicamente, o que ele faz é que ele imprima seu histórico de comandos e pegue o segundo último comando e o alimente na área de transferência (o último comando é esse, ele seleciona o segundo último comando).
Uma Função Personalizada
Desenvolvendo a solução rápida, aqui está uma pequena função que escrevi que é bastante inteligente e copiará o último comando usado. Você também pode fornecer argumentos numéricos para copiar o último enésimo comando. Por exemplo, para copiar o segundo último comando, forneça
2
como argumentoCopie e cole a função acima no seu
~/.bashrc
arquivo. Observe que, se você colocar isso em um arquivo de script bash separado e executar o script, ele não funcionará, pois o comando history não poderá acessar seu histórico nesse caso.Por fim, execute-o como:
Além disso, um recurso interessante adicionado a essa função é que ela se exclui do histórico após ser executada. Isso é útil porque o índice "reverso" dos comandos não muda.
fonte
screen
. A segunda resposta mais bem classificada também assumiubash
elinux
. Além disso, assumir quebash
não é grande coisa, porque o script ainda funcionaria em zsh ou na maioria dos outros shells.Este comando usa a expansão do histórico do bash (então se
!!
expande para a última linha que você digitou no terminal). Você provavelmente terá que instalar umxclip
ouxsel
.Isso colocará seu último comando na área de transferência Ctrl+ v, assim você poderá colar em qualquer programa da GUI (ou com Ctrl+ Shift+ vna maioria dos emuladores de terminal ou com
"+p
no vim).Isso será interrompido para algumas linhas que contêm aspas duplas, por exemplo:
Porém, funcionará para o comando que você deu como exemplo; você só deve ter problemas se as aspas duplas estiverem escapando
;
&
&&
|
||
e assim por diante.fonte
echo !!
-lo e ele funcionará perfeitamente (exceto no caso improvável em que seu comando anterior começou com-n
ou-e
ou com as poucas outras opções queecho
ele mesmo usa).Talvez não seja a solução mais conveniente, mas eu a uso e, portanto, pode ser útil para outros, pois não requer nenhuma instalação adicional.
Você precisa criar um arquivo temporário em qualquer diretório conveniente
Transfira a direção ou o texto necessário para esse arquivo. Para transferir a direção, você pode usar
Para obter direção do arquivo, use o comando
Para copiar e colar comandos, este sistema funcionará, é claro. Espero que tenha sido útil
fonte