Quem nunca precisou reexecutar um daqueles comandos complicados que merecem até um shell script, de tantas opções e parâmetros que o bicho pega? Volta e meia eu estou nessa categoria de gente.
Um exemplo típico são os "wgets", ou seja: uso demais o wget para baixar de tudo e nem sempre lembro a URL do arquivo da maioria das ISOs de distro... Para reexecutar um comando no shell basta preceder o nome do comando com o símbolo "!", assim:
!wget
Isso reexecutará o último comando "wget" com as opções.
"Legal!", você diz. Legal nada! E se o último "wget" não é o que eu preciso, hein? Faz como? Não faz? Faz sim! Só na base do "gato". Sabendo que estes comandos ficam armazenados em $HOME/.bash_history, vamos "grepar" a coisa atrás do nosso comando usando as aspas invertidas ou os parênteses de substituição. No exemplo, vou buscar a continuação de uma imagem ISO do antiX
Linux que comecei baixar:
`grep antiX .bash_history`
ou
$(grep antiX .bash_history)
Estes dois comandos (ou formas de escrever o comando) produzem o mesmo resultado: o shell irá interpretar a saída do comando grep, que retornará a linha completa que encontrou no arquivo de histórico do bash, executando nosso comando com as opções.
Para outros comandos, basta lembrar algum dos parâmetros do comando a ser executado e lançar para busca no grep e, se necessário, testar antes de chamar o programa à execução, seja buscando com o grep, sem aspas e parênteses, assim:
grep antiX .bash_history
Se for necessário, utilize um pipe, de um grep no outro, como neste exemplo:
grep comando | grep regex | grep regex
até refinar a busca e sair o que precisamos.
Nem sempre esta é a melhor saída. Há ocasiões em que é melhor mesmo redigitar o comando ou buscar com as setinhas (coisa da amiga readline).
Eu uso este esqueminha para aqueles casos macarrônicos de opções, parâmetros impossíveis de lembrar e para os endereços do wget, já que estou mestre em esquecer as URLs. O mplayer é notório por suas combinações nada saudáveis de parâmetros.
Espero que tenha sido de valia.
Até a próxima.