Terminal Linux (por exemplo, Ubuntu), existe um método para obter a última linha? Digamos que eu esteja digitando aleatoriamente um td
comando, que não foi instalado no meu sistema, por isso receberei uma mensagem como abaixo. Eu gostaria de ter um "atalho" para executar sudo apt-get install textdraw
rapidamente.
Existe essa ferramenta ou como posso copiar a última linha para a área de transferência sem usar o mouse?
username@WorkStation:~$ td
The program 'td' is currently not installed. You can install it by typing:
sudo apt-get install textdraw
username@WorkStation:~$
sudo apt-get install textdraw
, nãotd
. seta para cima só vai me dar o #td
Respostas:
Se você não se importa com um pouco de obscenidade (eu não), convém usar essa porra , uma ferramenta que faz exatamente o que você pediu.
Bem, não exatamente, mas resolve o mesmo problema. Em vez de apenas obter a última linha, ele tenta corresponder ao último comando digitado.
Os exemplos mostrados no repositório mostram vários dos cenários que você mencionou.
fonte
A resposta curta: não, provavelmente você não tem um método disponível para fazer isso.
A resposta longa:
vi
(onde a saída não é um bom texto orientado a linhas). bash não faz isso, de qualquer maneira.Na prática, o que as pessoas fazem para solucionar essa limitação é usar outros programas para capturar a saída do comando e editá-la. Mas isso não resolverá seu problema imediato.
Por exemplo, eu uso o vi-like-emacs para emitir comandos ad hoc shell. Se esses itens não exigirem entrada adicional, funcionará bem em executá-los em uma janela , capturando a saída do comando - e editando a saída conforme necessário para refinar o comando. O Emacs também permite que você faça algo assim, assim como o vim.
fonte
Se você recebeu essa mensagem no ubuntu depois de executar um comando inexistente do bash, seu sistema provavelmente está usando a
command_not_found_handle
função. Você pode vê-lo/etc/bash.bashrc
.Um hacking trivial pode ser uma opção: acabei de criar um script chamado
cnfh
:Em seguida, execute o comando td usando este script:
Usando o Ubuntu 14.04.2 LTS . Espero que ajude.
fonte
No tmux v2.4 e posteriores (desde que este commit https://github.com/tmux/tmux/commit/76d6d3641f271be1756e41494960d96714e7ee58 ) com
send-keys -X
. Pode ser possível em versões mais antigas, com uma sintaxe diferente.Em
.tmux.conf
:Agora,
prefix+!
copiará a última linha na posição atual do cursor.cursor-left
pode ser deixado de fora se você quiser executá-lo diretamente sem digitar return.Nota : não funcionará se a última linha estiver vazia ou quebrada, mas ainda for útil na maioria dos casos
fonte
Para executar a última linha de saída do comando mais recente, se você desejar executar novamente esse comando (já que ele não fez nada, exceto emitir uma mensagem de diagnóstico), faça
Passo a passo (camada por camada):
fc
(que pode significar "Fix Command") é um comando interno do shell para acessar o histórico de comandos.-ln
l
(minúsculas L) - l ist comando anterior (s)n
- não incluem comando n umbers1
(um) - refere-se ao comando mais recentefc -ln -1
lista o comando mais recente, sem incluir um número de comando.$(fc -ln -1)
executa o comando mais recente.$(fc -ln -1) | tail -n 1
executa o comando mais recente e exibe a última linha de sua saída. Esta é asudo apt-get install textdraw
linha, no seu exemplo.$($(fc -ln -1) | tail -n 1)
executa esse comando.Você pode alias isso:
Deixo a você escolher um nome mais curto para o apelido.
Notas:
|
,<
,>
,;
,&
, ou até mesmo citações. Se você precisar manipular comandos complexos, provavelmente poderá fazê-lo adicionando umeval
, mas isso não é recomendado.tail -n 17 | head -n 1
.fc
. Observe quefc -ln -1
é a abreviação defc -ln -1 -1
. Para recuperar o terceiro comando mais recente, usefc -ln -3 -3
.fonte