Selecionar comandos do histórico do bash


20

Pressionar o botão para cima é entediante e eu posso perder o comando que estava procurando. Portanto, ao digitar historyno terminal, todos os comandos que eu inseri antes foram indexados para um número. Existe alguma maneira de eu ligar para o número associado ao comando?


alguma opção mais interativa até agora? Estes são tão propenso a erros
mate

Respostas:


31

A história do bash pode fazer muitas coisas úteis, e a pesquisa Strg-rmencionada por Terry Wang é importante entre elas. 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 digitar tudo isso novamente. Em vez disso, basta ligar

sudo !!

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

!3

para executar novamente o comando na posição 3. Lembre-se de que isso conta do topo. Portanto, se você estiver 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 executar novamente o último comando iniciado com uma sequência como

!apt-

o que refaz a última linha que começou com "apt-". Se você quiser o último comando em que a string apareceu em qualquer lugar da linha, use algo como

!?pt-ge

Há 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 a partir do histórico. então

!-5:3:p

imprimiria o terceiro parâmetro no quinto do último comando.

EDIT: Com relação ao comentário de Rudie abaixo, com as configurações padrão, essas expansões do histórico do bash são realmente executadas diretamente. Provavelmente é melhor descrito assim: uma chamada como !-3é substituída pelo shell pelo terceiro último comando do seu histórico e, em seguida, sua entrada (com a substituição) é executada. Portanto, se você digitar !-3e pressionar ENTERe seu terceiro último comando for ls ~, é o mesmo que se você digitasse ls ~novamente e pressionasse ENTER"por conta própria".

Se você não quiser, pode definir a opção shell histverify. Para definir e desmarcar opções de shell, convém ler o shoptcomando. Com histverifyset, uma chamada como !-3apenas grava a substituição do seu histórico na linha de comando, mas não a executa diretamente. Assim, você deve pressionar o crucial ENTER- ou abster-se, se quiser.


Então !é muito perigoso ... eu gostaria de saber o que !-4fez exatamente antes de executá-lo. Ou isso mostra primeiro? Resumo legal!
Rudie

11
@ Rudie Esse é um bom ponto, eu atualizei minha resposta. Os recursos do histórico destinam-se principalmente a acelerar o trabalho e a economizar as teclas digitadas. Então, um padrão "Você realmente, realmente quer dizer isso?" pelo menos parcialmente, derrotaria esse objetivo. E mesmo que você pudesse, normalmente você não chamará um comando "distante" como !-238. Não deve ser muito difícil lembrar o seu segundo último, terceiro último, talvez o último comando;) Como sempre no Linux (e, na verdade, com a computação em geral), é esperado que você saiba o que está fazendo. E se você realmente quer a rede de segurança adicional, é um shoptfora;)
Henning Kockerbeck



3

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

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, incluindo Ctrl+ Rpara chamar a pesquisa incremental (pressione Enterquando você encontrar o comando que deseja executar) ou fc PREFIXpara executar o anterior. comando começando com PREFIX.


1

O historycomando mostrará todos os comandos e seus números associados. Se você quiser apenas fazer uma verificação rápida antes de executar a linha de comando # 135, digite:

echo !135

Isso mostrará o que será executado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.