El signo de exclamación en la shell no es para gritar: sirve para ser vago

Fuentes: A shell exclamation mark is not for yelling. Be lazy.

El programador Filip Roséen explica en su blog personal cómo aprovechar los designadores de eventos (palabras que empiezan por !) y el comando POSIX fc para dejar de repetir comandos manualmente en bash, zsh, csh y tcsh. La idea central es aplicar el principio DRY también en la línea de comandos: en lugar de pulsar flecha arriba hasta dar con la orden deseada o reescribir argumentos a mano, se puede reutilizar la línea anterior o fragmentos concretos con sintaxis breve.

Roséen desglosa la estructura [event][:word][:modifier]. Los designadores de evento (!!, !-2, !ssh, !?texto?, !#, ^ssh^scp^) permiten volver a ejecutar líneas previas; los designadores de palabra (!:0, !:1, !:$, !:1-2, !*) seleccionan qué parte de esa línea reutilizar; y los modificadores (:h, :t, :r, :e, :s/.../.../) la transforman para extraer el directorio, el nombre de archivo o la extensión, entre otros. Ilustra cada pieza con ejemplos prácticos, como repetir un comando con sudo !!, cambiar de host conservando los flags con !:2* o convertir extensiones de archivo en lote.

El artículo también repasa el comando POSIX fc, menos conocido, que permite abrir un comando anterior en el editor configurado ($FCEDIT o $EDITOR, con caída a ed si no existe) para editarlo antes de ejecutarlo de nuevo. Resulta especialmente útil para reescribir comandos largos o aplicar la misma sustitución a varias líneas seguidas, por ejemplo reemplazar un nombre de host en un rango de órdenes. Roséen advierte de que estas técnicas están pensadas para shells interactivos, no para scripts, y recomienda memorizar al menos cuatro designadores (!$, !:0, !$:h y !$:t) para empezar a ahorrar pulsaciones desde el primer día.