
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 r
comando (que é em si um caso especial do fc
comando):
$ 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 $EDITOR
para 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 csh
e 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/
...