Bash history - obtém o último comando por string, contendo espaço

2

Eu sei sobre o recurso bash! text, que executa o último comando começando com "text". Mas parece não funcionar, quando "texto" contém espaço. Às vezes é útil procurar por algo, contendo espaços.

por exemplo:

history | grep ping
  514  ping 192.168.100.2
  515  ping 192.168.100.3
  516  ping 192.168.100.4
  517  ping google.com
  518  ping 192.168.100.5
  519  ping 192.168.100.6
  520  ping 192.168.100.7

Eu quero ligar para a linha "ping google.com", usando o! característica. Eu tentei algumas coisas, mas elas falharam:

este é o comportamento padrão, ele executa o último comando ping

/root# !ping  
ping 192.168.100.7

Uma string simples com espaço depois! não funciona

/root# !ping google
ping 192.168.100.7 google

Como eu sei, as citações dizem ao bash para interpretar uma string com espaço como uma única string, em vez de duas strings separadas. Mas aqui não funciona como esperado.

/root# !"ping google"
bash: !"ping: event not found

/root# !'ping google'
bash: !'ping: event not found

/root# "!ping google"
"ping 192.168.100.7 google google"

/root# '!ping google'
bash: !ping google: command not found

/root# !\"ping google\"
bash: !\"ping: event not found

/root# !(ping google) 
bash: !: event not found

Isso chama o comando, mas chamará o último comando, contendo a string. Eu quero apenas comandos, começando com "ping"

/root# !?google
ping google.com

É possível fazer o que eu quero?

    
por Nuclear 22.08.2013 / 15:47

2 respostas

3

você pode usar a pesquisa inversa (control-r se o modo de edição estiver definido como emacs, que é o padrão) e funciona com espaço.

    
por 22.08.2013 / 16:07
3

Posso pensar em algumas maneiras:

  1. Use ? . O seguinte é de man history :

    !?string[?]
          Refer to the most recent command preceding the
          current postition in the history list contain‐
          ing  string.  The trailing ? may be omitted if
          string is followed immediately by a newline.
    

    Então, você deve conseguir fazer isso:

     !?ping google?
    
  2. Use o recurso de pesquisa inversa. Pressione Ctrl R e comece a digitar ping google . Pressione Enter quando o comando relevante for encontrado.

por 22.08.2013 / 16:17

Tags