Usando la Consola III

Bueno, aquí estoy otra vez con un poco de Bash. Vamos a ver un poco de snippets (trozos de código), aliases y variables de entorno.

No intento dar una lección de Bash ni desglosar cada uno de sus aspectos, pero si intentaré dar algunos conceptos que muchas veces la mayoría de los mortales desconocen.

En cualquier sesión de bash (al abrir una consola por ejemplo) siempre se leen una serie de archivos antes de presentar el prompt. Entre esos archivos, los más importantes son /etc/profile y ~/.bashrc

El primero (/etc/profile) es el archivo que contiene el “perfil” de una sesión bash. Allí es donde se encuentra definida la variable PATH común para todos los usuarios del sistema. Si lo analizáramos, enseguida veríamos:

if [ "`id -u`" -eq 0 ]; then
 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
 PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"
fi

Con una rápida lectura nos damos cuenta por la primera línea, que verifica si somos el usuario root, con lo cual si es cierto nos define una variable PATH. En caso contrario (o sea para el resto de los usuarios) definirá otra variable PATH. En este archivo también se define el valor predeterminado del prompt.

El segundo archivo (~/.bashrc) se aloja en nuestro home.

Dejenme dar una nota aclaratoria: El caracter ~ representa a nuestra carpeta de usuario. Asimismo nuestro home se encuentra almacenado en otra variable de entorno que conocemos por HOME. Se suele representar las variables de entorno en mayúsculas para hacer una clara distinción.

Supongamos estamos sobre /tmp y queremos ir a nuestro home en /home/user. Podemos hacerlo de cuatro maneras diferentes:

user@machine:/tmp$ cd
user@machine:/tmp$ cd ~
user@machine:/tmp$ cd $HOME
user@machine:/tmp$ cd /home/user

Las 4 son formas válidas de dirigirnos a nuestra carpeta home.

Por eso es que cuando vemos algo como ~/.bashrc en realidad nos estamos refiriendo a un archivo en nuestro home. Usando el mismo razonamiento, el archivo se puede acceder con $HOME/.bashrc y con /home/user/.bashrc. El punto (.) inicial nos indica que el archivo es oculto.

Volvamos a la explicación. El archivo .bashrc está en nuestro home y nos pertenece. Se lee inmediatamente luego de /etc/profile y es allí donde podremos colocar aquellos cambios que creamos necesarios, ya sean de rutas (PATH), variables, aliases o trozos de código (snippets).

Una de las cosas interesantes es que podemos crear aliases.

Por ejemplo, podemos ahorrarnos tipeo para descomprimir un archivo tar.gz si creamos un alias para referirnos al comando en cuestion:

alias untar="tar zxf"

al tener creado este alias, desde la consola simplemente escribimos:

$ untar nuestroarchivo.tar.gz

Funciones

En el archivo .bashrc podemos incluír funciones que podremos ejecutar como si fueran archivos de script o comandos.

En una entrada anterior (Usando la Consola II) había mostrado un script para renombrar todo a minúsculas. Pues al crear una función en .bashrc puedo tener dicho script de manera más sencilla:

function minusculas() {
for FILE in *; do
  mv "$FILE" "`echo "$FILE" | tr [A-Z] [a-z]`"
done
}

Guardamos los cambios y ya. Noten que use FILE para indicar un argumento. En este caso el argumento FILE (que es una variable) representará todos los archivos que existan en el directorio donde corra la función. Por eso es que para mostrar su valor se deba utilizar el caracter $.

Papelera

Una de las cosas que a veces lamento es borrar archivos desde la consola. Es casi imposible recuperarlos. Por eso, les voy a mostrar como con dos funciones, un alias y algunas variables podemos tener nuestra propia papelera por si borramos ‘sin querer’.

Voy a poner el código comentado, para explicarlo a medida que lo escribo:

function papelera() {
  # creo la carpeta oculta 'papelera' en la carpeta home
  # uso la variable $HOME para indicar el home
  mkdir $HOME/.papelera 2>/dev/null

  # me fijo si ya existe una copia del archivo en papelera,
  #si existe lo elimino
  if [ -d "$HOME/.papelera/$1" ]; then
    /bin/rm -r "$HOME/.papelera/$1"
  fi

  # ahora muevo el/los archivo/s que estoy 'borrando'
  mv --target-directory=$HOME/.papelera/ -- "$@"
}

function vaciarpapelera() {
  # elimino todo el contenido de la papelera
  # (aquí no hay punto de retorno)
  /bin/rm -rf $HOME/.papelera/* $HOME/.papelera/.??*

  # intento crear la carpeta por si se ha borrado o perdido
  mkdir $HOME/.papelera 2>/dev/null
}
# creo un alias para evitar usar rm
# si quiero usar el comando rm, puedo utilizar
# la ruta absoluta /bin/rm o bien utilizar \rm
# para neutralizar el alias
alias rm='echo Advertencia: Utiliza "papelera" para eliminar archivos'

Con estas dos funciones ahora podemos ‘borrar’ archivos enviándolos a la papelera y poder recuperarlos luego si nos arrepentimos o si nos equivocamos.

Cuidado! Recuerden vaciar la papelera corriendo la función ‘vaciarpapelera’

Actualización 16-10-2009

Otra buena opción (para no tener que administrar 2 papeleras, una gráfica y otra en bash) es crear una función papelera para que envíe los archivos a la papelera (gráfica) de nuestro escritorio:

En GNOME:

function papelera() {
  gvfs-trash "$@"
}
alias rm='echo Advertencia: Utiliza "papelera" para eliminar archivos'

En KDE:

function papelera() {
  kfmclient move "$@" trash:/
}
alias rm='echo Advertencia: Utiliza "papelera" para eliminar archivos'

Variables y Argumentos

Como para cerrar el tema, cuando utilizamos scripts bash, ya sea como archivos o funciones es posible que necesitemos pasar valores y argumentos.

$0         es el nombre del script
$1         es el primer argumento de la lista
$2         es el segundo
$* o $@    representan todos los argumentos
$#         es la cantidad de argumentos pasados

Así, cuando vemos un script que solicita $1 sabemos que es el primer argumento que pasamos en línea de comandos. O si vemos un bucle for sobre $# sabemos que repetirá el bucle de acuerdo a la cantidad de parámetros que le pasemos.

No voy a dejar bibliografía porque hay muchísima y muy buena. Sean buenos y busquen, Google es tu amigo.

Ojalá puedan crear y usar muchos scripts, para hacer más ameno (aún más) el uso de la querida consola.

Saludos

3 comentarios (+¿añadir los tuyos?)

  1. gladys
    Oct 10, 2009 @ 12:26:17

    Listo,todo impreso.Ahora…a seguir estudiando!!!
    Gracias Drago!

    Responder

  2. jinetedeldragon
    Oct 16, 2009 @ 10:48:15

    He actualizado la entrada con algunas opciones de papelera en bash no tan complicadas para gnome y kde.
    Espero les sirvan

    Responder

  3. rabyGurn-online
    Mar 07, 2010 @ 19:12:50

    necesidad de comprobar:)

    Responder

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Archivos

octubre 2009
D L M X J V S
« Sep   Nov »
 123
45678910
11121314151617
18192021222324
25262728293031
A %d blogueros les gusta esto: