El signo de exclamación en tu shell no es para gritar: sé perezoso
A shell exclamation mark is not for yelling. Be lazy

Este artículo explica cómo usar los designadores de eventos en bash, csh, tcsh y zsh para repetir comandos y manipular argumentos sin esfuerzo. Aprende a usar !! para repetir el comando anterior, !$ para el último argumento, y modificadores como :h para extraer directorios. También cubre el comando fc, que permite editar comandos en tu editor favorito, y consejos para verificar expansiones antes de ejecutarlas. Una guía práctica para ahorrar pulsaciones de teclas en tu terminal.
No grites a tus colegas; grita en tu shell.
- userbinator
Cada vez que alguien menciona esto, pienso "ah, claro, podría hacer eso" y luego lo olvido inmediatamente. Especialmente si escribes rápido, es más fácil simplemente "seguir recto" con el comando que quieres, que añadir otra "rama mental" que interrumpa el flujo. Por la misma razón, a menudo hago Ctrl+C y empiezo de nuevo en lugar de intentar retroceder y corregir.
- idoubtit
Hace décadas, un usuario de Linux me enseñó a usar `!` y compañía, que era fanático del truco `sudo !!`. Luego pasé de esa interpolación implícita a atajos explícitos, y me alegro de haberlo hecho. Como se sugiere en las FAQ al final, en lugar de !… puedes usar ctrl-r. O mejor, opcionalmente escribe las primeras letras y luego alt-p o "flecha arriba". Es más potente y más extensible. Otros atajos, como alt-., permiten navegar entre los parámetros pasados. Con flecha arriba, alt-p, alt-. y similares, la línea de comandos muestra el comando real. La magia de !… es más propensa a errores y ambigua; con zsh, sugeriría pulsar TAB para expandir la magia en texto estático. Añadiría otras entradas a las FAQ: ¿Cuando escribo `sudo !!`, se almacena sin cambios en el historial del shell, o se almacena después de la interpolación de `!!`? ¿Cuando empiezo una línea de comandos con un espacio, para que zsh no la ponga en el historial, !… también ignora esa línea? ¿Es `!$` recursivo?
- miki123211
En mi opinión, !$ es el más útil de todos (es el que se reemplaza con el último argumento del último comando). !! se puede hacer igual de fácil con flecha arriba y enter, que es igual de rápido. !ssh se puede hacer con ctrl+r, que de hecho te muestra lo que va a ejecutar y si el último ssh es hacia donde crees. sudo !! es flecha arriba, ctrl+a, 'sudo ', una pulsación más pero es natural si conoces tu readline. El resto son demasiado complejos y no merece la pena aprenderlos. !$ es el punto dulce.
- inigyou
Esto es para teletipos. Para aquellos de nosotros con pantallas electrónicas interactivas, podemos usar la flecha arriba para recordar el último comando o Ctrl-R para buscar en el historial, y luego editar el comando recordado.
- Terr_
Más que una sensación de "genial" o "útil", de alguna manera termino sintiendo desesperación por lo orgánicamente complicado que es determinar qué hace realmente algo en la línea de comandos. Para ser justos, siempre he sido partidario de que "solo los scripts más simples deberían estar en lenguajes de shell". Esto también añade una nueva dimensión intrigante a la revisión/verificación de comandos de shell como benignos y correctos... ¿Cuánto tiempo pasará hasta que los LLMs empiecen a (ab)usar del truco en pequeñas peticiones que quieren que apruebe?