Puedo usar '!!' en alias o guiones?

10

En la Terminal puedo usar lo !!que hará referencia a mi comando anterior.
¿Es posible usar esto en un alias? Lo he intentado, pero lo que sucede es que los signos de exclamación dobles se interpretan literalmente.

Lo que quiero tener es posible:

  1. Entro algun comando
  2. Escribo un alias que incluirá lo que se ingresó en el paso 1

Si hay una solución usando scripts que también es aceptable.

Ludwig Magnusson
fuente
¿Cuál es tu objetivo principal? agregar más opciones al último comando?
Sergiy Kolodyazhnyy
No, mi objetivo es escribir rápidamente un comando largo que uso con frecuencia. En el medio hay una larga cadena que a menudo es el comando anterior
Ludwig Magnusson
parece que solo quieres un fccomando para que abra un editor de texto, porque esa es la forma más fácil de editar comandos largos. Déjame agregarlo a mi publicación. Además, ¿tal vez podría proporcionar un ejemplo de comando?
Sergiy Kolodyazhnyy
Agregué una edición a mi publicación
Sergiy Kolodyazhnyy

Respuestas:

11

El comando que enumera el último comando ejecutado es fc -nl -1. Usando la sustitución de salida, podemos agregar más parámetros al mismo contenido

$> ls /etc/passwd
/etc/passwd
$> $(fc -nl -1)  /etc/group                                                     
/etc/group  /etc/passwd
$> 

Citar, sin embargo, puede ser un problema con este enfoque

Una característica muy agradable de esto fces que si solo ejecuta el fccomando por sí mismo, abrirá el editor de texto especificado en la FCEDITvariable (que probablemente desee almacenar ~/.bashrc) y el contenido de la línea será su último comando. Para su comodidad, le sugiero que lo use nanocomo editor de texto, pero si lo sabe vim , aún mejor.

Por ejemplo, ¿qué pasa si necesito editar una qdbus org.ayatana.bamf /org/ayatana/bamf/matcher org.ayatana.bamf.matcher.ActiveWindowlínea enorme, verdad? Pero con fc, puedo abrir vimy editar /org/ayatana/bamf/matcher, guardar, salir y se ejecutará.

Sergiy Kolodyazhnyy
fuente
9

No puedes usar !!pero ...

Del manual :

Un alias útil para usar con el comando fc es r='fc -s'que escribir 'r cc' ejecuta el último comando que comienza con cc y escribir 'r' vuelve a ejecutar el último comando.

Rinzwind
fuente
Esto me permitirá agregar algo al comienzo de mi último comando. ¿Qué pasa en el medio?
Ludwig Magnusson
8

Si insiste en usar la !!sintaxis de expansión del historial en lugar de fc(ya mencionado), hay una manera.

De manera predeterminada, la historyexpansión está deshabilitada para sesiones de shell no interactivas, por ejemplo, en scripts.

Para habilitar la expansión del historial en scripts, habilite primero las opciones de shell relevantes:

set -o history 
set -o histexpand

set -o histexpandpuede escribirse como set -Htambién.

Ahora las operaciones de expansión del historial, por ejemplo !!, funcionarían dentro del script.

heemayl
fuente