Selecione os comandos do histórico bash

9

Pressionar o botão para cima é entediante e eu posso perder o comando que estava procurando. Então, quando digito history no terminal me dá todos os comandos que eu digitei antes, indexados a um número. Existe alguma maneira que eu poderia chamar o número associado ao comando?

    
por user182936 08.09.2013 / 13:02

4 respostas

17

O histórico bash pode ajudar muito, e a pesquisa com Strg-r mencionada por Terry Wang é importante entre eles. Mas também é possível fazer exatamente o que você pediu.

Você pode refazer o comando anterior com !! . Com isso, você também pode editar o comando anterior. Se, por exemplo, você esqueceu de obter privilégios de root para um comando

apt-get install a-long-list-of-packages

você não precisa redigitar tudo isso novamente. Em vez disso, basta ligar

sudo !!

Se você quiser re-executar o comando em uma posição específica do seu histórico, você também pode usar ! , por exemplo

!3

para re-executar o comando na posição 3. Esteja ciente de que isso conta a partir do topo. Então, se você está armazenando 500 comandos em seu histórico, !1 seria "500 comandos atrás". Você também pode usar números negativos. Por exemplo

!-2

executaria novamente o segundo último comando.

Você também pode reexecutar o último comando que começou com uma string como

!apt-

que refazia a última linha que começou com "apt-". Se você quer o último comando onde a string apareceu em qualquer lugar da linha, você pode usar algo como

!?pt-ge

Existem coisas mais interessantes que a história do bash pode fazer. Apenas para dar uma impressão da ampla gama de possibilidades, você pode acessar especificamente um parâmetro de um comando do histórico. Então

!-5:3:p

imprime o terceiro parâmetro para o quinto do último comando.

EDIT: Sobre o comentário de Rudie abaixo, com as configurações padrão, as expansões do histórico bash são de fato executadas diretamente. Provavelmente é melhor descrito assim: Uma chamada como !-3 é substituída pelo shell com o terceiro último comando do seu histórico e então sua entrada (com a substituição) executada . Portanto, se você digitar !-3 e pressionar ENTER e seu terceiro último comando for ls ~ , ele será o mesmo se você digitou ls ~ novamente e pressionou ENTER "sozinho".

Se você não quiser isso, poderá definir a opção de shell histverify . Para configurar e desativar opções de shell, você pode querer ler o comando shopt . Com histverify set, uma chamada como !-3 grava apenas a substituição do histórico para a linha de comando, mas não a executa diretamente. Você tem que, para speek, pressionar o ENTER você mesmo - ou abster-se dele, se você quiser.

    
por Henning Kockerbeck 08.09.2013 / 13:27
9

Sim, existe. Se, por exemplo, você quiser executar o comando que tem o número 1234 próximo a ele, faça:

!1234

Outras coisas úteis:

  • Se você quiser executar o último comando que você executou, faça:

    !!
    
  • Se você quiser executar o último comando ls que você executou, faça:

    !ls
    
  • Se você acabou de executar ls /some/long/path e deseja cd , faça:

    cd !$
    

Para mais informações:

por Alaa Ali 08.09.2013 / 13:27
3

Use a combinação de chaves Ctrl - r , você poderá usar a palavra-chave para pesquisar o histórico bash.

Uma referência rápida de vinculação de chave bash: link

    
por Terry Wang 08.09.2013 / 13:06
1

Se você encontrou o número do histórico de um comando e deseja executá-lo novamente, digite ! seguido do número, por exemplo, !1234 e pressione Enter . Isso faz parte da expansão do histórico ; você pode adicionar modificadores a ele.

Se você deseja editar o comando antes de executá-lo, fc 1234 chama um editor externo.

Mas como Terry Wang já mencionou , geralmente há maneiras mais rápidas de localizar um comando no histórico do que determinar seu número histórico, incluindo Ctrl + R para invocar a pesquisa incremental (pressione Enter quando tiver encontrado o comando que você deseja executar) ou fc PREFIX para executar o comando anterior, começando com PREFIX .

    
por Gilles 08.09.2013 / 13:28

Tags