Shell bash (I) - Edición en línea
Introducción
Seguramente más de una vez habréis visto a alguien escribir
comandos a una velocidad de vertigo delante de una terminal de
GNU/Linux. Este artículo pretende iniciar una serie en la que se
irán desvelando los secretos de la shell bash, la más
extendida en el mundo GNU/Linux, para acceder a ella sólo teneis
que ejecutar cualquier terminal, ya sea xterm
, o en caso de
usar Gnome gnome-terminal
, los que usen KDE disponen
de konsole
, y aquellos que no usen modo gráfico, después
de hacer login, casi con toda certeza se encontrarán bajo una
shell bash.
Consideraciones previas
A lo largo de todo el artículo aparecerán numerosas
combinaciones de teclas del estilo C-x, que significa
pulsar la tecla Ctrl y mientras se mantiene pulsada,
pulsar también la tecla x, después, soltar ambas
teclas.
Otras veces aparecerá algo como M-f, en este caso
M se refiere a la tecla Meta, esta tecla suele
coincidir con la tecla Alt en los teclados de los PC, con
lo cual para realizar la anterior combinación, habría que pulsar
la tecla Atl y mientras se mantiene pulsada, presionar
también la tecla f, después soltar ambas. El problema
llega cuando aparece una combinación del tipo M->
(Meta y el signo mayor que), si en un teclado español
pulsamos la tecla Alt junto con la tecla con el símbolo
mayor que, nos encontraremos con que la combinación que realiza es
la contraria: M-< (Meta y menor que), alguno
habrá pensado en añadir la tecla de Mayúsculas a la
combinación, o en activar el bloqueo de mayúsculas, pero eso no
funcionará. Entonces... ¿cómo solucionar esto? pues bien, existe
una manera de emular a la tecla Meta y es usando la tecla
Esc, la emulación se haría primero pulsando la tecla
Esc, soltandola, y a continuación poniendo el símbolo
> (en teclados españoles pulsar Mayusculas y
la tecla de mayor que).
Editando la línea
Para asegurarnos de no nos cargarnos nada que pueda ser importante,
crearemos un directorio llamado tmp
, en el cual se podrán
realizar todos los ejemplos aquí propuestos, así es que, manos
a la obra, abrimos una terminal y ponemos:
~ $ mkdir tmp
Ya tenemos creado nuestro directorio, ahora, para entrar en el
directorio vamos a emplear una serie de combinaciones de teclas,
la primera será C-p, que recuperará del historial el
último comando que escribimos, también se puede usar el cursor
arriba para retroceder por el historial. Lo que pretendemos es
eliminar el comando mkdir
, pero el cursor está
situado al final de la línea de edición:
~ $ mkdir tmp
Pulsando C-a lograremos que el cursor se coloque en
el inicio de la línea:
~ $ mkdir tmp
Si pulsamos C-d, nos borrará la letra sobre la que
está el cursor:
~ $ kdir tmp
En cambio, pulsando M-d se borrará la palabra sobre la
que está situado el cursor, osease, eliminamos kdir
, quedando tan
solo el nombre del directorio que creamos anteriormente:
~ $ tmp
Finalmente, escribiendo cd
y pulsando intro
entraremos en el directorio:
~ $ cd tmp
~/tmp $
Una vez dentro de nuestro directorio, vamos a seguir viendo que
más combinaciones nos ofrece bash, para ello, prueba a
escribir el mensaje tengo un coche rojo
, pero no pulses intro:
~/tmp $ tengo un coche rojo
¿Qué clase de comando es tengo?, si intentasemos ejecutar
esa línea, el shell nos daría un error, vamos a poner el comando
echo
delante. Para ello, presionamos C-a, tecleamos
echo
, ponemos un espacio y obtenemos:
~/tmp $ echo tengo un coche rojo
Ahora que tenemos el cursor sobre la t
de la palabra
tengo
, nos apetece que la t
sea mayúscula, así que
pulsamos M-c para conseguir esto:
~/tmp $ echo Tengo un coche rojo
Si ahora pulsamos tres veces la combinación C-f el
cursor avanzará tres carácteres:
~/tmp $ echo Tengo un coche rojo
En cambio, si pulsamos dos veces M-f, el cursor
avanzará dos palabras:
~/tmp $ echo Tengo un coche rojo
Por el contrario, si pulsamos C-b dos veces, el cursor
retrocederá dos carácteres:
~/tmp $ echo Tengo un coche rojo
No obstante, si empleamos la combinación M-b, el
cursor retrocederá hasta el inicio de la palabra, y si pulsamos la
misma combinación otras tres veces más, ira retrocediendo palabra
a palabra hasta llegar al inicio del mensaje:
~/tmp $ echo Tengo un coche rojo
Ahora intentaremos poner el mensaje entre comillas dobles, para
ello, pulsamos la tecla de comillas (") y luego la combinación
C-e para dirigir el cursor al final de la línea:
~/tmp $ echo "Tengo un coche rojo
Antes de cerrar las comillas, vamos a cambiar la palabra
rojo
por la palabra azul
, para ello, si pulsamos la
tecla borrar una vez, veremos como se elimina el carácter
que hay detras del cursor:
~/tmp $ echo "Tengo un coche roj
Pero si en cambio, usamos M-borrar, lo que se borrará
será la palabra que hay detras del cursor:
~/tmp $ echo "Tengo un coche
Ahora simplemente tecleamos azul
y ponemos las comillas
dobles finales:
~/tmp $ echo "Tengo un coche azul"
Hemos terminado de editar la línea, es el momento de pulsar
intro y dejar que la shell ejecute el comando:
~/tmp $ echo "Tengo un coche azul"
Tengo un coche azul
Llegados a este punto, muchos lectores se habrán percatado de
que hay muchas combinaciones donde si se emplea la tecla
Control se actua sobre carácteres (C-b,
C-f, C-d, ...), mientras que si se emplea la
tecla Meta se actua sobre palabras (M-b,
M-f, M-d, ...). Otra convinación de teclas
que sigue este esquema es C-t y M-t, la primera
intercambia el carácter sobre el cursor con el carácter anterior
y avanza el cursor un carácter, de forma que podemos seguir
arrastrando ese carácter hasta el final de la línea. La segunda
combinación (M-t), hace exactamente lo mismo, solo que en lugar de
carácteres con palabras, veamos su funcionamiento con un ejemplo,
para ello, escribimos lo siguiente:
~/tmp $ mkrdi uno dos tres
Se aprecia perfectamente que el comando mkdir
está mal
escrito, para corregirlo hay que mover el carácter r
hasta el final de la palabra, así es que antes de nada,
pulsamos C-a para ir al principio de la línea, y después
pulsamos C-f tres veces para situar el cursor sobre el
carácter d
:
~/tmp $ mkrdi uno dos tres
Si ahora pulsamos C-t, los carácteres r
y d
se intercambiarán y el cursor avanzará hasta
la i
:
~/tmp $ mkdri uno dos tres
Pulsando de nuevo C-t, se intercambiarán la r
y la i
y el cursor avanzará hasta el espacio, quedando
corregido el comando:
~/tmp $ mkdir uno dos tres
Ahora pulsemos M-f para que el cursor avance una
palabra, situandose entre las palabras uno
y dos
:
~/tmp $ mkdir uno dos tres
Si pulsamos M-t podremos comprobar como se
intercambian las palabras uno
y dos
y el cursor
se coloca justo delante de la palabra tres
:
~/tmp $ mkdir dos uno tres
Autocompletar
Una característica realmente importante de bash es su
habilidad para autocomplear lo que se está escribiendo mediante el
uso de la tecla Tabulador, para demostrar como funciona,
vamos a crear tres archivos
llamados archivo1.txt
, archivo2.txt
y archivo3.txt
mediante el siguiente comando:
~/tmp $ touch archivo1.txt archivo2.txt archivo3.txt
A continuación escribiremos cat a
y pulsaremos la
tecla Tabulador, tras esto, se oirá un pitido y aparecerá
lo siguiente en la pantalla:
~/tmp $ cat archivo
Esto significa que bash ha encontrado varios archivos
que comienzan por la palabra archivo
, pero que a partir de
ahí existe una diferencia en sus nombres, si pulsamos dos veces la
tecla Tabulador, bash nos mostrará una lista con
todos los archivos que comiencen por la palabra archivo
:
~/tmp $ cat archivo
archivo1.txt archivo2.txt archivo3.txt
~/tmp $ cat archivo
Ahora tenemos que indicarle a bash cual de esos tres
archivos es el que queremos, pulsamos la tecla 2 seguida
de Tabulador y la shell autocompletará el resto del
nombre:
~/tmp $ cat archivo2.txt
En este caso, bash no pita y además, ha añadido un
espacio al final de la línea, indicando que ha logrado
autocompletar el nombre del archivo y permitiendonos la
posibilidad de seguir añadiendo parámetros al comando sin tener
que pulsar la tecla Espacio.