Completación y sustitución de comandos (sustitución y creación del alias)
bash incluye mecanismos de abreviatura para reducir la cantidad de escritura que hacemos. Una de ellas es la completación de comandos, en la cual bash trata de adivinar el comando que vas a digitar.
Por ejemplo al digitar unos de los primeros caracteres de un comando, y presionar Tab, bash intenta adivinar que comando quieres escribir; si está completamente seguro bash completará el comando por tí, de lo contrario sonará un “Beep”, pulsa de nuevo Tab y bash desplegará una lista de los posibles comandos que tu quieres. Por ejemplo:
casidiablo@debianita:~$ apt
apt-cache apt-config apt-ftparchive aptitude apt-sortpkgs
apt-cdrom apt-extracttemplates apt-get apt-key
El mismo mecanismo funciona si se está digitando el nombre de un archivo o directorio. Por ejemplo si escribes “ls /u” y presionas Tab, bash completará el comando y quedará así: “ls /usr/”.
El shell también permite otros métodos para ahorrarse la escritura, por ejemplo los mecanismos de sustitución. Se permite varios tipos de sustituciones.
Sustitución mediante comodines
Existen dos tipos de caracteres comodines importantes, el primero de ellos es el asterisco (*), que representa cero o más caracteres de un nombre de archivo, y el signo de interrogación (?) que representa cualquier carácter individual.
¿como se utiliza? seguramente ya lo hayas visto en muchos lados, por ejemplo cuando queremos listar todos los archivos fuente de C, lo hacemos con la instrucción “ls *.c” lo que le indica al shell que busque cualquier archivo que termine con .c, e ignora por completo el número de caracteres al principio o su valor.
Talvez quisieras ver todos los nombres de los archivos de C que tengan solamente 4 letras antes de la extensión, en ese caso utilizariamos el comando “ls ????.c”. En bash la sustitución de caracteres es más robusta que en DOS, y no tiene problemas en expandir “a??def*g.cpp” a una lista de archivos que empiezen con la letra ‘a’ seguida de dos caracteres cualesquiera, seguidos por def, por cero o más caracteres, por ‘g’ y terminen con la extención “.cpp”.
Sustitución mediante cadenas
bash permite la sustitución de secuencias específicas de caracteres. Puedes especificar una lista separada por comas de cadenas entre llaves, y cada una se utilizará en orden. Por ejemplo:
casidiablo@debianita:~$ ls a{b,c,de,fgh}z
abz acz adez afghz
casidiablo@debianita:~$
Las letras a y z se combinan con cada una de las cadenas entre las llaves: primero con b, luego con c, luego con de y luego con fgh.
Sustitución mediante la salida de un comando
Otra forma de sustitución es mediante la salida de un comando. La salida de un comando se puede especificar como argumento a otro comando:
bash# ls -l ‘find /usr/src -name Makefile -print’
Este ejemplo ejecutará el comando find para localizar todos los archivos make que estén en el árbol de directorio /usr/src. La lista de archivos se presentará en la línea de comandos a ls, el cual mostrará las entradas en el directorio de estos archivos.
Historial y edición de comandos
bash mantiene una lista de los comandos que has escrito, en lo que se conoce como historial de comandos. Por ejemplo, si escribes una serie de comandos, y deseas ejecutar uno de ellos otra vez, no es necesario volverlo a escribir, puedes buscarlo presionando la tecla “arriba” (la de la flechita). Por lo general el tamaño de esta lista es de 500 comandos ¿suficiente no?
También tenemos la opción de ver los comandos que se han escrito con la instrucción history, por ejemplo:
casidiablo@debianita:/media/documentos/archivos$ history
1 g++
2 ci
3 ls
4 mkdir /media/hda2
5 sudo mkdir /media/hda2
6 ls
7 echo $PATH
8 ls -a
9 history
Para invocar cualquier comando anterior, digita un signo de admiración y el número del comando. Para repetir el comando echo $PATH (por ejemplo), escribe !7 así:
casidiablo@debianita:/media/documentos/archivos$ !7
echo $PATH
/home/casidiablo/mono-1.1.13.8/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
Es posible repetir el último comando con !!. También puedes editar una línea de comandos anterior antes de repetirla. Supongamos que hemos escrito el comando ls -l /USR/lib. Para corregir este comando y repetirlo, podriamos escribir ^USR^usr^. bash da por hecho que queremos editar el comando anterior y procede con la sustitución, de ser posible.
Creación de alias de comandos
Probablemente utilices con frecuencia ciertos comandos o secuencias de los mismos. Es posible crear nuestros propios comandos utilizando lo que se conoce como alias. El shell reemplazará el alias con su definición.
Por ejemplo, el comando ls lista los archivos y directorios de una carpeta. Con la opción -a muestra también los archivos ocultos, y con la opción -F añade un asteristo (*) a los archivos ejecutables y un slash (/) a los directorios. Puedes crear un alias para dicho comando de la siguiente manera:
casidiablo@debianita:~$ ls
Desktop mono-1.1.13.8 mono-1.1.13.8_0-installer.bin
casidiablo@debianita:~$ ls -a -F
./ .gconf/ mono-1.1.13.8/
../ .gconfd/ mono-1.1.13.8_0-installer.bin*
.bash_history .gimp-2.2/ .mozilla/
.bash_logout .gksu.lock .nautilus/
.bash_profile .gnome/ .recently-used
.bashrc .gnome2/ .themes/
.bitrock/ .gnome2_private/ .thumbnails/
Desktop/ .gstreamer-0.10/ .viminfo
.dmrc .gtkrc-1.2-gnome2 .Xauthority
.evolution/ .ICEauthority .xine/
.face .icons/ .xsession-errors
.fontconfig/ .metacity/
casidiablo@debianita:~$ alias lss=”ls -a -F”
casidiablo@debianita:~$ lss
./ .gconf/ mono-1.1.13.8/
../ .gconfd/ mono-1.1.13.8_0-installer.bin*
.bash_history .gimp-2.2/ .mozilla/
.bash_logout .gksu.lock .nautilus/
.bash_profile .gnome/ .recently-used
.bashrc .gnome2/ .themes/
.bitrock/ .gnome2_private/ .thumbnails/
Desktop/ .gstreamer-0.10/ .viminfo
.dmrc .gtkrc-1.2-gnome2 .Xauthority
.evolution/ .ICEauthority .xine/
.face .icons/ .xsession-errors
.fontconfig/ .metacity/
casidiablo@debianita:~$
Ahora hemos creado un nuevo comando llamado lss que hará la misma tarea de “ls -a -F”. También es posible sustituir un comando, por ejemplo, pudimos haber hecho: alias ls=”ls -a -F”, sin ningún problema.
Nota: Es necesario el uso de las comillas, ya que sin ellas el comando alias intentaría usar el -a y el -F como una opción de sí mismo.
Sin comentarios | deja el tuyo


