
Hay una función de expansión de parámetros/variables realmente útil en BASH que no veo en el historial. Revisé las páginas de manual para ver el historial y el propio BASH. No allí... tal vez me lo perdí.
Ejemplo: uso mucho ssh y puedo hacer esto con expansión variable.
[email protected]
Supongamos que quisiera extraer solo el host; en lugar de eso, eliminar el nombre de usuario.
hostonly=${host##*@}
Si yo
echo $hostonly
Yo obtengo:
bar.org
Mi pregunta: ¿Es posible hacer esto con el historial de la línea de comandos?
p.ej.,
Comando 1:
ssh [email protected]
Comando 2:
ssh gary@!!:##*@
Esto no funciona, por supuesto, pero ¿alguien puede confirmar si este tipo de coincidencia de patrones está disponible o no?
¡Gracias!
bubnoff
Respuesta1
Un buen truco que la gente suele pasar por alto es el r
comando (que es en sí mismo un caso especial del fc
comando):
$ ssh [email protected]
(...)
$ r foo=baz
El caso más general es
$ fc -s foo=bar ssh
que le permite seleccionar un comando del historial por subcadena, luego realizar la sustitución especificada y ejecutarlo. Si deja de lado -s
, cargará el comando $EDITOR
para realizar modificaciones más complejas; La edición de la línea de comandos en su mayoría hace que esto sea innecesario, pero hay algunas ediciones que son difíciles de realizar en la línea de comandos.
También puede realizar una manipulación bastante compleja utilizando !
la sintaxis de referencia histórica, pero por razones históricas (el mecanismo histórico básico se estableció temprano csh
y todas las mejoras en su mayoría han mantenido la compatibilidad) utiliza una sintaxis diferente. Veraquípara detalles.
Respuesta2
$ ssh [email protected]
...
$ ^foo^gary^
...
El comando se repite usando "gary" como nombre de usuario en lugar de "foo". Lo siguiente funciona de la misma manera:
$ ssh [email protected]
...
$ !!:s/foo/gary/
...