Manipulação do histórico BASH: substituição de pesquisa

Manipulação do histórico BASH: substituição de pesquisa

Há um recurso de expansão de parâmetro/variável realmente útil no BASH que não vejo no histórico. Verifiquei o histórico das páginas de manual e o próprio BASH. Não aí...talvez eu tenha perdido.

Exemplo: eu uso muito ssh e posso fazer isso com expansão de variáveis.

[email protected]

Suponha que eu queira extrair apenas o host – em vez disso, remova o nome de usuário.

hostonly=${host##*@}

Se eu

echo $hostonly

Eu recebo:

bar.org

Minha pergunta: É possível fazer isso com o histórico da linha de comando?

por exemplo.,

Comando 1:

ssh [email protected]

Comando 2:

ssh gary@!!:##*@

É claro que isso não funciona, mas alguém pode confirmar se esse tipo de correspondência de padrões está disponível ou não?

Obrigado!

Bubnoff

Responder1

Um truque interessante que muitas vezes passa despercebido às pessoas é o rcomando (que é em si um caso especial do fccomando):

$ ssh [email protected]
(...)
$ r foo=baz

O caso mais geral é

$ fc -s foo=bar ssh

que permite selecionar um comando do histórico por substring, executar a substituição especificada e executá-la. Se você deixar de fora -s, ele carregará o comando $EDITORpara modificações mais complexas; a edição na linha de comando geralmente torna isso desnecessário, mas há algumas edições que são difíceis de fazer na linha de comando.

Você também pode fazer manipulações bastante complexas usando !a sintaxe de referência do histórico, mas por razões históricas (o mecanismo básico do histórico foi estabelecido anteriormente cshe todas as melhorias mantiveram a compatibilidade em sua maioria) ele usa uma sintaxe diferente. Veraquipara detalhes.

Responder2

$ ssh [email protected]
...
$ ^foo^gary^
...

O comando é repetido usando "gary" como nome de usuário em vez de "foo". O seguinte funciona da mesma maneira:

$ ssh [email protected]
...
$ !!:s/foo/gary/
...

informação relacionada