En Bash, la history
El comando es la clave no solo para comprender lo que ha estado haciendo durante su sesión de shell, sino también para obtener materia prima para los nuevos comandos que desea ejecutar en el futuro. History
es especialmente útil cuando está ejecutando un servidor sin cabeza. Si no tiene mouse, no puede copiar y pegar fácilmente la última mitad de un comando complejo para ejecutar una versión ligeramente modificada, por lo que debe escribir todo de nuevo, a menos que use history
modificadores.
Mantén el historial fuera de tu historial
Antes de discutir la historia, aquí hay un consejo para mantener la history
literal entradas fuera de su historial.
El problema con el uso del history
Comando para revisar tu history
es que agrega una entrada a tu history
expediente. Estas entradas no solo saturan tu history
, pero también hacen que cada línea se aleje "más" de su posición actual.
$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$ history
102 cd example-project
103 ls
104 touch doc/LICENSE
105 history
$
Un objetivo en movimiento es difícil de rastrear y difícil de alcanzar, así que si planeas usar seriamente tu history
para acelerar sus interacciones Bash, agregue esta configuración a su .bashrc
archivo:
export HISTCONTROL=$HISTCONTROL:ignorespace
Esta configuración evita que cualquier comando precedido por un espacio se agregue a su history
de Bash .
$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$ history
102 cd example-project
103 ls
104 touch doc/LICENSE
$
[ Curso en línea gratuito:Resumen técnico de Red Hat Enterprise Linux. ]
Eventos históricos
La estructura básica del shell history
comienza con una lista de events
. Un event
es cualquier cosa que haya ingresado en el shell, seguido de Return
o Enter
llave. Cada event
se le asigna un número de índice (un número de línea), y puede ver y recuperar eventos usando event designators
.
Por ejemplo, para recuperar un elemento de línea específico en su shell history
, utilice un signo de exclamación (!
) seguido inmediatamente por el número del history
línea:
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
También puede hacer referencia a comandos anteriores en relación con su posición en el history
listado. Por ejemplo, para ejecutar un comando dos líneas en el pasado, piense en su solicitud actual como una más grande que la última línea en history
y luego reste el número de la línea que desea ejecutar de su número de línea actual. En este ejemplo, la línea 103 es la línea objetivo y 105 es el aviso actual (para un delta de 105-103=2 ):
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Puede guardar un carácter completo si solo desea volver a ejecutar la última línea. La expresión !!
y !-1
son sinónimos:
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Observe que el comando en sí se repite en la salida cuando history
se repite. Para mayor brevedad y claridad, dicha salida se excluye de los ejemplos restantes en este artículo.
Designadores de palabras
Bash tiene características para ayudarte a analizar tu history
usando word designators
y herramientas que le permiten modificar los comandos en su history
. Podría ser útil pensar en el history
de su shell como una matriz indexada, o incluso como un gran objeto de historial que consta de muchos elementos más pequeños. Cada palabra en cada línea de tu history
está indexado, comenzando en 0 (que suele ser el comando, pero los comandos de varias partes y los prefijos de variables de entorno son excepciones notables). Puede acceder a cada índice agregando dos puntos (:
) a su referencia de línea, seguido inmediatamente por el word designator
.
Aquí hay un ejemplo accediendo a la primera palabra:
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Debido a que agarrar el primer argumento es común, el acento circunflejo (o el "sombrero":^
) es un alias para :1
.
$ echo foo
$ !!^
foo
En el otro extremo del espectro, el dólar ($
) el signo representa el argumento final:
$ echo foo bar baz
$ echo !!$
baz
Rangos de palabras
No tienes que conformarte con un solo argumento. También puede extraer rangos de un índice. Todos los argumentos excepto el cero están disponibles con un asterisco (*
).
$ echo foo bar baz
$ touch !!*
$ ls
foo bar baz
Este es en realidad un sinónimo de 1-$
(es decir, del primer argumento al último argumento). Como era de esperar, puede definir arbitrariamente su rango utilizando esta notación no abreviada. Este ejemplo hace referencia del segundo al quinto argumento, ignorando el primero y los dos últimos argumentos:
$ cp foo a.sh spacer.sh rev.bin sync.py baz ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-5
$ ls -l --classify
a.sh* baz foo rev.bin* spacer.sh* sync.py*
Si solo necesita excluir la palabra única final en un índice, puede proporcionar un rango sin terminación:
$ cp foo a.sh spacer.sh ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-
$ ls -l --classify
a.sh* foo spacer.sh*
Uso de la historia para obtener velocidad y precisión
La history
El comando no siempre se trata de reducir las pulsaciones de teclas. Puedes usar tu history
de Bash para evitar excluir accidentalmente un archivo o carpeta de una operación importante, o escribir mal el nombre de un archivo. Siéntete cómodo con el history
Comando para interacciones Bash más robustas.
[ ¿Quiere probar Red Hat Enterprise Linux? Descárgalo ahora gratis. ]