Como executar facilmente a última linha de saída no bash?

2

Você provavelmente encheu o caso em que um pacote não estava instalado e o sistema recomendava que você o instalasse usando apt-get install mypackage .

Estou procurando um atalho de teclado rápido para executar esta última linha. Obviamente, a seta UP não a traria porque não era um comando executado por você e apenas a última linha de saída do programa executado anteriormente.

Alguma idéia de como obter esse comportamento no bash?

    
por sorin 23.11.2013 / 08:50

2 respostas

2

Você pode criar um apelido xo (nomeie o que quiser) que execute novamente o último comando sem imprimir nada de sua saída e, em seguida, execute a última linha dessa saída como um comando. / p>

alias xo='$($(fc -ln -1) |& tail -1)'

Em seguida, depois de tentar executar myapp e receber o comando que você pode usar para instalar o mypackage , que fornece myapp , basta digitar xo e pressionar Enter comando para instalar mypackage será executado.

Como isso funciona

$(fc -ln -1) se comporta de maneira semelhante à expansão do histórico !! . !! não funciona em um alias ou definição de função, mas fc (e substituição de comando com $( ) ) são suficientes.

$(fc -ln -1) |& tail -1 executa novamente o último comando, canalizando sua saída padrão e erro padrão para tail -1 , que descarta tudo menos a última linha.

Colocar isso em uma substituição de comando externa faz com que a última linha seja executada como um comando. A divisão de palavras é executada nela (já que a coisa toda não é entre aspas " ), que é o que você quer.

Fontes citadas

por 10.05.2015 / 01:49
-1

A solução possível seria $(!! |& tail -1) , como se diz neste tópico:

    
por 10.05.2015 / 01:11

Tags