Auto completar comando del historial en una terminal

Enviado por Tuxerito el 9 Octubre, 2009 - 23:40.

Muchas veces ejecutamos una gran cantidad de comandos en una terminal y en ocasiones necesitamos volver a ejecutar un comando previo y para no tener que escribir de nuevo todo el comando que puede ser algo extenso o que no recordamos por completo o simplemente por ahorrar tiempo, podemos recurrir a una característica que nos brindan las terminales y es que estas guardan un historial de comando ejecutados sin importar si hemos cerrado he iniciado sesión cientos de veces.

Para esto contamos con algunas opciones de revisar el historial:

1. Listar todos los comandos ejecutados usando la instrucción

history

Lo cual nos mostrara todos los comandos que hemos ejecutado en la consola, de esta forma podemos con el cursor seleccionar el comando que deseemos y copiarlo con las teclas Ctrl + Shift + C y pegarlo con Ctrl + Shift + V, o si nuestro ratón cuenta con la rueda(ratón de 3 botones), podemos seleccionar el comando deseado y presionamos el botón central con lo cual automáticamente se copia y se pega el comando seleccionado.

2. Podemos acceder a los últimos comandos ingresados presionando las teclas del curso Arriba y Abajo, presionando Arriba se mostrara el ultimo comando ejecutado, de esta forma podemos acceder desde el ultimo hasta el primer comando del historial, presionado la tecla del cursor Abajo accederemos al historial desde el primero hasta el ultimo comando.

3. Podemos ejecutar un comando del historial usando la opción de auto completar, algo así a como cuando se esta ingresando un comando o nombre archivo/directorio y que ingresamos la parte inicial y luego presionamos la tecla Tabulador para que se complete lo que queremos ejecutar. En la terminal podemos simular esto editando el archivo .inputrc que se encuentra en /etc/

Para esto podemos abrir el archivo con

kdesudo kate /etc/.inputrc

Una ves se abra el archivo agregamos estas 2 lineas y guardamos el archivo.

"\e[A":history-search-backward
"\e[B":history-search-forward

Si teníamos abierta una terminal la cerramos y la volvemos a abrir para que surja efecto lo que hemos hecho.

Como siempre, es recomendable no modificar archivos del sistema si se es muy novato y en este caso el archivo que modificamos es un archivo importante donde si modificamos algo por error podríamos obtener resultados no esperados, para prevenir esto podemos crear en nuestro Home un archivo llamado .inputrc y en el agregar las 2 lineas mencionadas mas arriba con lo cual obtendríamos el mismo efecto

kate ~/.inputrc

Agregamos las 2 lineas

"\e[A":history-search-backward
"\e[B":history-search-forward

Y guardamos.

Como funciona el autocompletado?

Simplemente comenzamos a escribir el comando que queremos ejecutar, por ejemplo escribimos kdesudo k y presionamos la tecla Arriba del cursor, con lo cual se auto completara el comando del historial que coincida con lo que hemos ingresado, en nuestro ejemplo aparecería en la consola kdesudo kate /etc.inputrc

Esto nos sirve tanto en una constola hasta una TTY.

Espero que sea de utilidad.

Imagen de abuhacker
Enviado por abuhacker el 9 Octubre, 2009 - 23:50.

tal vez te inspiraste en la "burra"de abuhacker mrgreen que pregunta siempre pavadas como :cual es el tabulador? meparto
Os cuento que si yo me posiciono al lado del login $....y giro la ruedita del mousse me van apareciendo todos los comandos que he usado.Un regalito de mi instalador o todos lo tienen?
Buena entrada tuxerito!!!

Imagen de Tuxerito
Enviado por Tuxerito el 9 Octubre, 2009 - 23:54.

La ruedita remplaza la función de las teclas arriba y abajo abuhacker, con lo cual harias el paso 2 de los 3 que mencione.

Imagen de Viorel
Enviado por Viorel el 10 Octubre, 2009 - 00:07.

Interesante, gracias por compartirla wink

En relación a history, tambien podemos usar !X donde X es el numero que le ha asociado history. Por ejemplo:

$ history
[...]
493  twidge lsrecent
494  su
495  uname
496  uname -a
497  su
[...]

Podemos llamar a twidge lsrecent usando:

$ !493

También se puede llamar al comando anteriormente usado con !!

$ !!

Y si por ejemplo el comando anterior necesitaba permisos de ejecución lo arreglamos así:

$ sudo !!

Curioso el último y muy práctico, saludos wink

Imagen de Tuxerito
Enviado por Tuxerito el 10 Octubre, 2009 - 00:27.

Hay muchas formas de usar el historial, esperemos que sidd quien es de los que mas usa la consola nos pueda aportar algo mas.

Imagen de strange1712
Enviado por strange1712 el 10 Octubre, 2009 - 03:20.

Muy buenos tips para el uso del historial, Tuxerito y Viorel!
Yo no sabía usar eso de history...
Je, saludos

Imagen de maalmike
Enviado por maalmike el 10 Octubre, 2009 - 05:50.

Muy bueno y muy útil

Sobre todo para mi que tengo muy mala memoria y suelo olvidar todo en cuestión de minutos.

Ahora solo espero no olvidar esto confused

Imagen de shaola
Enviado por shaola el 10 Octubre, 2009 - 09:42.

excelente! desconocía eso!. Un apunte: se puede sistutir el click en la rueda del raton con pulsar al mismo tiempo el boton derecho y el izquierdo del raton. Muy util en portátiles. Creo que esa característica se llama mouse wheel emulation.

Imagen de stalker
Enviado por stalker el 10 Octubre, 2009 - 10:36.

Muy interesante Tuxerito. En esta página no dejo de aprender cosas útiles. ¡Gracias!

Imagen de siddharta
Enviado por siddharta el 10 Octubre, 2009 - 15:40.

No me sabía ese "truco" para usar las teclas de dirección, así que ya tengo uno más para mi lista contrato

Yo me siento muy cómodo usando la combinación de teclas CTRL+R (reverse-i-search). Supongamos que yo recuerdo haber usado ping anteriormente, entonces presiono CTRL+R y el prompt se convierte así:

(reverse-i-search)`':

luego sólo escribo ping y automáticamente se muestra el último comando completo en el que usé ping:

(reverse-i-search)`ping': ping 172.16.111.8

pero esa no es la dirección IP a la que quiero hacer ping sino otra que también debe andar por ahí en el historial, así que ahí mismo vuelvo a presionar CTRL+R sin agregar nada más:

(reverse-i-search)`ping': ping keyserver.ubuntu.com

y nuevamente CTRL+R

(reverse-i-search)`ping': ping sidd.homelinux.org

es decir, presiono CTRL+R una y otra vez sin escribir nada más, hasta que aparezca el comando que quiero. Una vez que se ha visualizado sólo presiono ENTER y se ejecuta. Esto me es muy útil pues a veces ejecuto comandos más largos y no quiero volver a teclear todo, así que con CTRL+R lo busco rápidamente. No es necesario escribir la primer palabra del comando, puede ser cualquier palabra, por ejemplo si escribo pool me devolverá:

(reverse-i-search)`pool': ntpdate -s mx.pool.ntpd.org

Saludos,
Sidd.

Imagen de Tuxerito
Enviado por Tuxerito el 10 Octubre, 2009 - 15:47.

Esa forma es muy buena sidd, que bien que existen muchas formas y ya depende de como las usemos o cual nos sea mas útil.