Sempre que preciso digitar um comando longo, acho muito útil o ponto de exclamação para se referir ao histórico. Por exemplo, !ssh
pode ser usado para invocar o último ssh
comando que usei. No entanto, não consigo fazê-lo funcionar quando argumentos delimitados por espaço são adicionados à pesquisa.
Ao executar !ssh -i
, espero que o último comando começando com a string "ssh -i" seja executado. No entanto, o comando real que é invocado é o último ssh
comando com qualquer argumento e, em seguida, "-i" foi anexado ao comando.
Posso usar, !?ssh -i?
mas isso serve para fazer algo diferente e acredito que deve haver uma maneira simples de conseguir isso. Também reluto em digitar history|grep ...
todas as vezes.
Então, como posso me referir a um comando no histórico que começa com uma string contendo espaço, conforme indicado acima?
Editar Parece que não expliquei a questão com clareza suficiente. Digamos que eu tenha o seguinte histórico
ssh -i identity host1
echo ssh -i
ssh host2
agora, se eu executar !ssh
, o terceiro comando, ou seja, ssh host2
será executado. Espero digitar !ssh -i
para obter o primeiro comando executado, mas ssh host2 -i
é executado em vez disso (o que resulta em um erro). Posso usar !?ssh -i?
para executar o primeiro comando somente se o segundo comando não existir .
Acredito que você deseja alterar o comportamento padrão do HISTCONTROL do bash. Desta postagem: Por que o bash não está armazenando comandos que começam com espaços?
Se você quiser pular o! e permitir espaços, sugiro que você tente um shell diferente do bash. Casca de peixe funciona perfeitamente para o que você está pedindo :)
para experimentá-lo em seu shell bash, digite 'peixe'
Se você gosta, pode persistir com:
Obrigado ao comentário de Mark Plotnick. Eu encontrei uma solução. Embora não esteja usando a expansão do histórico bash. (Acredito que usar a expansão do histórico do bash para conseguir isso é impossível depois de ler [seção 9.3.1 do manual de referência do bash].( https://www.gnu.org/software/bash/manual/html_node/Event-Designators.html )
A solução é colocar as seguintes linhas em
~/.inputrc
, ou descomentar as linhas correspondentes/etc/inputrc
para efeito global.O código correspondente pode ser encontrado pressionando CtrlVe, em seguida PageUp, a tecla e os comandos são retirados da seção 8.4.2 do manual do bash .
Depois disso, posso usar PageUpa tecla para ir para o primeiro comando, como Mark comentou.