it-swarm-es.tech

poner el comando de historial en la línea de comando sin ejecutarlo

Uso! N donde (n) es el número de línea para ejecutar una línea en el archivo de historial que quiero ejecutar en el símbolo del sistema que encuentro a través de history | less.

Pero hay un evento de historial de línea de comando que deseo modificar manualmente. ¿Cómo puedo insertar en la línea de comando un contenido de eventos de historial sin que se ejecute realmente para poder modificarlo y luego presionar Intro?

Mejor,

59
Vass

Para solicitar que el comando se imprima en lugar de ejecutarse después de la sustitución del historial, agregue :pmodificador , p. !42:p. El comando resultante también se ingresará en el historial, por lo que puede presionar Up para editarlo.

Si tiene el histverifyopción set (shopt -s histverify), siempre tendrá la oportunidad de editar el resultado de las sustituciones del historial.

El fc builtin proporciona acceso limitado a la expansión del historial (sin designadores de Word) y le permite editar un comando anterior en un editor externo.

Puedes usar !prefix para referirse al último comando que comienza con prefix, y !?substring para referirse al último comando que comienza con substring. Cuando sepa lo que está buscando, esto puede ahorrarle mucho tiempo durante history | less.

Otra forma de buscar en el historial anterior es la búsqueda incremental: presione Ctrl+R y comienza a ingresar una subcadena de lo que estás buscando. prensa Ctrl+R para ir a la aparición anterior de la cadena de búsqueda hasta el momento y Ctrl+S si has ido demasiado lejos La mayoría de las teclas que no sean Ctrl+RCtrl+SBackspace y los caracteres normales finalizan la búsqueda incremental y tienen su efecto habitual (por ejemplo, las teclas de flecha para mover el cursor en la línea que ha alcanzado, Enter ejecutar el comando).

Otro pequeño: Alt+#

comenta la línea actual y la mueve al búfer de historial.

Entonces, cuando está ensamblando una línea de comando y necesita emitir un comando interino para, p. encuentra un archivo, solo presionas Alt+#, emita el otro comando, suba en el historial, descomente y continúe.

15
Rahul Patil

Puedes usar el espacio mágico para expandir la historia antes de presionar enter. En su .inputrc, asigne espacio al espacio mágico:

$if Bash
     Space: magic-space
$endif

Ahora, cada vez que escriba un espacio después de una especificación de historial, se expandirá inmediatamente, ¡útil si también desea editarlo!

7
Cascabel

Echa un vistazo a history-expand-line comando, vinculado a Alt+^ por defecto. Expandirá la línea en el lugar que luego puede editar.

7
Alex Barrett

Utilizando Ctrl+r puedes buscar el historial:

[email protected] ~ $ 
(reverse-i-search)`xran': xrandr -o normal

Cualquier comando que encuentre podría editarse ...


Creo que encontré exactamente lo que necesitas: ejecuta shopt -s histverify y la próxima vez que quieras usar !n el comando no se ejecutará sino que solo se colocará en la línea de comando ...

4
pbm

A menudo he querido esto. Cuando usaba csh (y tcsh), tenía un idioma:
!:88*:p

Este idioma inserta "Word 88 hasta la última palabra" del comando anterior en el punto donde está escribiendo en la línea de comando actual, que generalmente es el final. En csh, no es un error que dicha expresión no produzca palabras. Es decir, no es necesario que haya una Palabra 88, ni ninguna que la siga. Si no hay Word 88, esto no agrega palabras al final del comando que se está escribiendo y luego empuja la línea de comando resultante al historial sin ejecución.

Como probablemente sabes,
*! (como !! y! -1) es el comando anterior;
*: 88 es Word 88 (la primera palabra, generalmente el comando, es cero) y csh requeriría que exista dicha palabra, pero ...
*: 88 * son todas las palabras que comienzan en la Palabra 88, y luego csh no requiere que la Palabra exista;
*: p significa imprimir, pero no ejecutar la línea de comando.
Con o sin: p, la línea de comando se agrega al historial de comandos.

"¿Por qué 88?" ¿te preguntas? Porque es la misma clave que * Necesitaré. Si tiene comandos tan largos, tal vez!: 888 *: p es lo que necesita. Lo siento, esto no funciona con bash AFAIK. Bash simplemente dirá bash: :88*: bad Word specifier

Dato curioso: su comando generalmente no necesita ser el primero.
> /tmp/foo echo My command is Word 3
es válido en bash y csh.

1
W Dean Stanton

Normalmente uso Ctrl+r para buscar y luego Ctrl+e para ir al final de la línea sin ejecutar.

0
nikc