Percorre o histórico da shell com base no comando ou stub / stem?

0

Por favor, perdoe minha ignorância .... Eu tenho um histórico de comandos no Bash no OS X e Linux. Às vezes, quero voltar a um item com base no comando. Por exemplo, suponha que eu tenha inserido anteriormente:

make distclean && make dist && cp *.diff *.tar.gz ../

Então, suponha que eu tenha dezenas ou centenas de comandos seguindo isso na história.

Como posso digitar make e, em seguida, usar a seta para cima ( ) ou a seta de controle e para cima ( CTRL ) para voltar a esse comando na história?

O "stub" ou "stem" significa que eu só digito "ma", e não "make".

Eu trabalho no Bash no Linux e OS X, então eu estaria interessado em ambos os sistemas operacionais.

    
por jww 08.10.2015 / 21:44

3 respostas

2

Como alternativa a Ctrl-R , você pode usar o comando history e canalizá-lo para grep para um comando específico.

$ history | grep vi 
    7  vi /etc/shells
    8  sudo vi /etc/shells

De lá, você pode ver o número do histórico e executar o comando novamente usando !number .

$ !8
sudo vi /etc/shells
Password:

E eu acredito que, desde que você não preencha ou limpe o histórico de comandos, esse número deve permanecer o mesmo.

    
por 08.10.2015 / 23:01
2

Aqui estão alguns truques úteis que o ajudam a repetir o comando baseado em comandos anteriores (além de usar Ctrl + R ):

  • use !name para repetir o último comando a partir do nome, por exemplo:

    !make
    
  • para repetir o comando (por exemplo, com sudo ), use:

    sudo !!
    
  • para repetir o argumento, use !$ :

    ls /usr/local/bin
    cd  !$
    
  • para editar o arquivo do último argumento, use !^ :

     cp /etc/hosts hosts.bak
     vim !^
    

Veja mais em: Como usar o Bash History para melhorar sua produtividade de linha de comando

Veja também: Quais são seus recursos ou truques de linha de comando favoritos? no Unix SE

Como uma nota secundária, se você está cometendo erros de digitação com muita frequência, o app é para isso:

por 09.10.2015 / 12:04
1

Existe um recurso readline (não bash ) que faz exatamente isso. Adicione:

"\e[A":history-search-backward
"\e[B":history-search-forward

ao seu arquivo .inputrc .
Ao contrário de Ctrl-r , corresponde apenas ao prefixo. Veja A dica de linha de comando mais importante - histórico incremental pesquisar com .inputrc para mais detalhes.

    
por 09.10.2015 / 13:01