Cómo editar y ejecutar los últimos dos comandos con `fc` en bash

0

Acabo de enterarme de lo que se debe hacer fcpara golpear. Quiero usarlo para editar y ejecutar los dos comandos anteriores, incluido el comando más reciente .

Puedo editar y ejecutar dos comandos hasta pero sin incluir el comando más reciente con fc -2 0. Esto es lo que quiero, excepto compensado por uno para incluir el comando más reciente.

Una solución viable pero molesta es examinar la salida de history(o fc -l), encontrar los números de comando absolutos y dar el rango de comando en términos absolutos. Por ejemplo, si fc -l -2genera lo siguiente:

502  echo hello
503  echo goodbye

... entonces podría decir fc 502 503. Esto es lo que quiero, excepto que no quiero el paso adicional de examinar la salida del historial. (Lo sé, soy exigente).

¿Hay alguna manera de hacer esto que no implique (1) un examen manual de la historia o (2) un comando desechable para sacar los comandos de interés del lugar más reciente?

Estoy corriendo GNU bash version 3.2.57en macOS, por lo que vale.

Jeff Terrell Ph.D.
fuente
¿ fc -s -2; fc -s -1Funciona para ti? Funciona bashen Ubuntu 16.04.
AFH
@AFH - ¡Ay, no! Se -ssalta el paso de edición. (Además, me gustaría editar las dos líneas juntas). Aunque casi. :-)
Jeff Terrell Ph.D.
Si desea editar y ejecutar, omita el -s, como en fc -2; fc -1.
AFH
Correcto, pero quiero editar las dos líneas juntas. fc -2; fc -1edita y ejecuta en serie. Además, por cualquier razón, fc -2; fc -1edita el mismo comando (número -2) dos veces, en lugar de los dos más recientes.
Jeff Terrell Ph.D.
1
Recibo el mismo comando dos veces solo si aborto la primera edición, pero no puedo entender por qué. No está claro exactamente lo que quieres. ¿Desea editar dos comandos en una edición? Si esto es lo que desea, entonces fc -- -2 -1parece hacer esto, ya que --hace que todos los siguientes parámetros sean posicionales, no opciones.
AFH

Respuestas:

1

Uno esperaría fc -2 -1trabajar, pero parece haber confusión entre las opciones y los parámetros posicionales que comienzan con -. Sin embargo, usar el estándar --para separar las opciones de los parámetros parece ofrecer una solución:

fc -- -2 -1

Tenga en cuenta que las versiones bashanteriores a 4.3. tuvo otros problemas con el fccomando, incluido fff.aquí , donde la selección de la línea del historial puede ser incorrecta.

AFH
fuente
0

Esto toma la identificación de los últimos 2 comandos y los ejecuta nuevamente

fc -l -2 | cut -f1 | fc -s
Igor Fobia
fuente
Desafortunadamente, eso no me permite editar los comandos antes de ejecutarlos. Gracias sin embargo!
Jeff Terrell Ph.D.
Me temo que no entiendo lo que puedes hacer editando el comando antes de ejecutarlos. ¿Podría ser más claro sobre sus requisitos de edición? Por ejemplo, desea abrir automáticamente un archivo de texto con los últimos 2 comandos, editarlo, guardarlo y ejecutar los comandos en el archivo de texto.
Igor Fobia
Sí, eso es exactamente Es lo que hace la fcconstrucción a menos que se especifique el interruptor -lo -s.
Jeff Terrell Ph.D.
entonces el comentario de @AFH a su pregunta me parece la respuesta correcta
Igor Fobia