GNU/Linux >> Tutoriales Linux >  >> Linux

Uso de modificadores de palabras con el historial de Bash en Linux

En mi artículo, Parsing Bash history, demostré cómo hacer referencia a elementos en su shell history tanto por número de línea como por posición de palabra. Una vez que haya dominado el análisis de Bash history por índice de línea y palabra, puede beneficiarse de los modificadores disponibles para el history comando.

La opción de shell histexpand

Antes de discutir history análisis, vale la pena mencionar que el signo de exclamación (! ) la notación solo está disponible para su shell Bash gracias a histexpand opción. Porque histexpand está habilitado de forma predeterminada, muchos usuarios nunca le dan mucha consideración. Sin embargo, es la opción que fuerza la expansión de un ! a la lista de history entradas.

Si la opción se desactiva, perderá esta funcionalidad. Por ejemplo:

$ echo foo
$ set +o histexpand
$ !-2
bash: !-2: command not found
$ set -o histexpand
$ !-3
echo foo
foo

Generalmente, histexpand está activado de forma predeterminada, excepto en shells no interactivos (por ejemplo, en un script de shell). Debería history la taquigrafía te falla, puedes activar histexpand como una opción de shell o usar el history completo comando implícito en histexpand :

$ echo foo
$ set +o histexpand
$ history -p !-2
echo foo
foo

En un script de shell, debe activar history y proporcione una ubicación donde history se puede guardar:

HISTFILE=/tmp/history.log
set -o histexpand
set -e

## some code here

## clean up
rm /tmp/history.log

Una ventaja de dejar histexpand desactivado es que se pierde la verbosidad de los resultados del history comportamiento. Por ejemplo, con histexpand activado, lo primero que regresa a su shell después de un history comando es la versión ampliada de lo que se está ejecutando:

$ set -o histexpand
$ echo foo
foo
$ !!
echo foo
foo

Con histexpand desactivado, su history El comando es más largo, pero los resultados son más concisos:

$ set +o histexpand
$ echo foo
foo
$ !!
foo

Si encuentra un uso para history en un script de shell depende de ti, pero history los modificadores tienen algunos atajos interesantes que los hacen particularmente convenientes en algunos casos.

Modificadores de historial

Modificadores al history las selecciones se designan con dos puntos (: ) seguido de un carácter modificador. Algunos modificadores pueden combinarse con otros.

Sufijo de nombre de archivo

Para eliminar el sufijo de un argumento, use r modificador.
Esto es similar a basename .

$ ls -lgGh aLongFileNameWith-a_complex-syntax-1.tgz
-rw-r--r-- 1 0 Mar  9 11:23 aFileNameWith-a_complex-syntax-1.rev.tgz

$ echo !!:2:r
echo aLongFileNameWith-a_complex-syntax-1
aLongFileNameWith-a_complex-syntax-1

El r modificador no es súper inteligente. Simplemente encuentra el punto final en un nombre de archivo y corta el sufijo, que a veces puede no coincidir con lo que usted piensa que es el sufijo del archivo, por lo que, de alguna manera, basename ofrece mayor flexibilidad.

$ set +o histexpand
$ ls -lgGh aLongFileNameWith-a_complex-syntax-1.tar.gz
$ echo !!:2:r
aLongFileNameWith-a_complex-syntax-1.tar

El resultado opuesto se puede lograr con el e modificador:

$ set +o histexpand
$ echo aLongFileNameWith-a_complex-syntax-1.tgz
aLongFileNameWith-a_complex-syntax-1.tgz
$ echo !!:2:e
.tgz

Nombres de archivo

Una versión simple de dirname está disponible con el h modificador:

$ set +o histexpand
$ echo src/spacer.sh
src/spacer.sh
$ echo !!^:h
src

Y el otro lado de esa expresión está disponible con t modificador:

$ set +o histexpand
$ echo src/spacer.sh
src/spacer.sh
$ echo !!^:t
spacer.sh

Sustitución de cadenas

Posiblemente el modificador más ampliamente útil de history es sustitución de cadenas. Por ejemplo, cualquier administrador de un entorno mixto ha escrito esto en un cuadro de Red Hat Enterprise Linux en algún momento:

$ sudo apt install tmux

Tal error es fácil de corregir con la sustitución de cadenas:

$ ^apt^dnf
sudo dnf install tmux

Incluso puede agregar algunas opciones:

$ ^apt^dnf -y
sudo dnf -y install tmux

Esta history la sintaxis es una forma abreviada de s modificador La sintaxis completa es, por ejemplo, !!:s/apt/dnf y, por lo tanto, puede ser útil para elementos varias líneas atrás en su history . Suponga que emitió un comando útil tres comandos atrás y desea ejecutar un comando similar ahora:

$ !-3:s/vi/emacs/
sudo dnf install -y emacs

Me gusta sed , esta sustitución por defecto solo ocurre una vez, pero puede hacerla global (en relación con la línea que está recuperando) con g modificador:

$ pip update pip
[...]
$ !!:gs:/pip/pip3/
pip3 update pip3

La seguridad es lo primero:cómo realizar un simulacro de historial

Presionando Return después de un history modificado line a veces puede ser estresante, especialmente cuando la línea que desea volver a ejecutar se encuentra entre comandos particularmente peligrosos o afecta archivos importantes. Si desea verificar el comando que está a punto de modificar y ejecutar, puede usar el p modificador al final de un history modificación.

$ !-32:0-:s/mv/trash/:p
trash important.txt status.txt pay.txt

El comando que ve como resultado es el elemento expandido de history , pero aún no se ha ejecutado. Puede ejecutarlo manualmente, presionando el Up flecha o Ctrl+P , ahora que se ha resuelto para usted. Usando la verificación (p ) suele ser una buena idea si eres nuevo en el uso del history comando en producción.

Conclusión

Su historial de Bash puede ser útil para muchas cosas, ya sea para revisar lo que ha estado haciendo todo el día o simplemente para hacer que su trabajo sea más eficiente al reutilizar fragmentos de información en los que ya ha trabajado para resolver. Cuanto más practique con los modificadores de historial, más útiles se volverán. Permítase (cuidadosamente) tropezar con algunos a medida que aprende la sintaxis, y pronto recordará comandos y argumentos con menos pulsaciones de teclas que nunca.

[ ¿Quiere probar Red Hat Enterprise Linux? Descárgalo ahora gratis. ]


Linux
  1. Cómo borrar el historial de línea de comandos BASH en Linux

  2. Cómo borrar el historial de Bash en Linux

  3. Analizando el historial de Bash en Linux

  4. Ejemplo de uso de canalizaciones con nombre en Linux Bash

  5. Obtener máscara de subred en Linux usando bash

Comando de historial en Linux con ejemplos

Cómo habilitar la marca de tiempo en el historial de Bash en Linux

Comando Bash Echo explicado con ejemplos en Linux

Programar trabajos en Linux con el comando 'at'

Usando el comando Dirname de Linux en Bash Scripts

Cómo borrar el historial de Bash en Linux y Mac