Página siguiente Página anterior Índice general

4. Configuración del intérprete de órdenes

Para los que gusten de trabajar en línea de órdenes (con frecuencia es más cómodo. Yo de hecho utilizo X casi exclusivamente para ejecutar algunos programas; toda la gestión de ficheros, retoques al sistema, etc, lo hago desde línea de órdenes).

Los intérpretes de órdenes en UNIX suelen ser muy configurables. Los usuarios pueden modificarlos o darles órdenes para automatizar tareas o tener un aspecto algo diferente. El intérprete de órdenes estándar en Linux (y probablemente el más potente) es bash, que viene de Bourne Again SHell. El intérprete Bourne fue el primero, y es el más extendido en UNIX. bash lo supera con creces.

Hay dos ficheros importantes que mirar a la hora de configurar el comportamiento del bash: el ~/.bash_profile y el ~/.bashrc. El primero son las órdenes que se ejecutarán la primera vez que entremos en el intérprete. El segundo contiene las órdenes que se ejecutarán siempre que entremos. Así, ~/.bash_profile se utiliza para guardar las variables de entorno, y los datos que definen el perfil de usuario, mientras que ~/.bashrc son las órdenes que se deben ejecutar siempre que entremos en el intérprete, como llamar a programas como fortune (que nos genera una cita aleatoria), definir los alias, etc.

Definir los alias en el ~/.bashrc tiene la ventaja de que se pueden definir los alias dependiendo de las condiciones en las que se cargue el intérprete. Por ejemplo, yo defino un alias del vi, para que ejecute vi -g, que carga la versión para X, pero sólo quiero que el alias se defina si el intérprete se llama desde X (si se llama desde X, sólo se carga .bashrc, porque obviamente tendremos que haber tenido previamente un intérprete cargado, que es donde está ejecutándose X). Entonces, lo que hago es comprobar si existe la variable de entorno DISPLAY (las variables de entorno se explican en otra subsección de esta misma sección), lo que es una forma cutre pero efectiva de comprobar si X está cargado. Sólo si está, defino el alias. Aunque para entender perfectamente lo siguiente habría que saber programación en el lenguaje del intérprete de órdenes (tienes un tutorial en mi página), y conocer algunas órdenes de UNIX, pongo el código que hace esto a continuación:

        if set | grep DISPLAY &>/dev/null; then
                alias vi="vi -g"
        fi

4.1 Definir alias

Un alias es un nombre de una orden ficticia, que se sustituye por otra orden (en general, por cualquier ristra que nosotros queramos). Uno de los usos más útiles es para ``soldar'' opciones a un programa. Es decir, si hay un programa que siempre vamos a llamar con las mismas opciones (por ejemplo, se supone que nos gusta el ls en color, y para ello tenemos que darle la opción --color), es muy útil tener definido un alias para la propia orden, que sustituya la orden por la orden más las opciones que queramos. En este caso, queremos que siempre que escribamos ls al principio de una línea (o sea, cada vez que llamemos al programa ls), se cambie la ristra ls por ls --color (y que deje todo lo que fuera después intacto, por supuesto).

Para ello, nos basta con escribir (si lo queremos siempre, lo escribiremos en nuestro .bash_profile o .bashrc; las comillas son importantes)

        alias ls="ls --color"

También, si estás acostumbrados a teclear win para entrar en el entorno de ventanas, y por alguna razón patológica o política :-) no quieres acostumbrarte a escribir startx, puedes definirte un alias tal que así (aquí no hacen falta las comillas porque startx no contiene espacios):

        alias win=startx

Alias útiles

Ahí va una lista de alias útiles para el novato, junto con una breve explicación:

        alias ll='ls -l'                # Si quieres conservar el ls original
        alias ls='ls -lF --color'       # Listado largo en color
        alias mv='mv -i'                # \     Pedir confirmación
        alias cp='cp -i'                #  >    antes de
        alias rm='rm -i'                # /     sobreescribir

4.2 El ls en color

Aunque por supuesto no es algo necesario, es muy útil tener configurado el ls de tal forma que muestre los diferentes tipos de fichero de un color determinado. Para conseguir esto, lo primero que hay que hacer es definir cómo queremos los colores. Hay una configuración del sistema, que se cogerá por defecto si no especificamos algún fichero en nuestro directorio actual.

Tienes que poner en tu .bash_profile la siguiente orden:

        eval `dircolors $HOME/.dir_colors`
Suponiendo que llames .dir_colors al fichero donde tengas la definición de los colores para el ls, y que lo pongas en tu directorio raíz ($HOME).

Para que tengas por dónde empezar, te adjunto mi fichero .dir_colors:

# Sigue el fichero ~/.dir_colors --------------------------------------------

# Configuration file for the color ls utility
# This file goes in the /etc directory, and must be world readable.
# You can copy this file to .dir_colors in your $HOME directory to override
# the system defaults.

# COLOR needs one of these arguments: 'tty' colorizes output to ttys, but not
# pipes. 'all' adds color characters to all output. 'none' shuts colorization
# off.
COLOR tty

# Extra command line options for ls go here.
# Basically these ones are:
#  -F = show '/' for dirs, '*' for executables, etc.
#  -T 0 = don't trust tab spacing when formatting ls output.
# -b = better support for special characters
OPTIONS -F -b -T 0

# Below, there should be one TERM entry for each termtype that is colorizable
TERM linux
TERM console
TERM con132x25
TERM con132x30
TERM con132x43
TERM con132x60
TERM con80x25
TERM con80x28
TERM con80x30
TERM con80x43
TERM con80x50
TERM con80x60
TERM xterm
TERM vt100

# EIGHTBIT, followed by '1' for on, '0' for off. (8-bit output)
EIGHTBIT 1

# Below are the color init strings for the basic file types. A color init
# string consists of one or more of the following numeric codes:
# Attribute codes: 
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# Background color codes:
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
NORMAL 00       # global default, although everything should be something.
FILE 00         # normal file
DIR 01;34       # directory
LINK 01;36      # symbolic link
FIFO 40;33      # pipe
SOCK 01;35      # socket
BLK 40;33;01    # block device driver
CHR 40;33;01    # character device driver

# This is for files with execute permission:
EXEC 01;32 

# List any file extensions like '.gz' or '.tar' that you would like ls
# to colorize below. Put the extension, a space, and the color init string.
# (and any comments you want to add after a '#')
.cmd 01;32 # executables (bright green)
.exe 01;32
.com 01;32
.btm 01;32
.bat 01;32
.tar 01;31 # archives or compressed (bright red)
.tgz 01;31
.arj 01;31
.taz 01;31
.lzh 01;31
.zip 01;31
.z   01;31
.Z   01;31
.gz  01;31
.jpg 01;35 # image formats
.jpeg 01;35
.gif 01;35
.bmp 01;35
.xbm 01;35
.xpm 01;35
.tif 01;35
.cc  01;36 # códigos fuente
.c   01;36
.h   01;36
.awk 01;36
.l   01;36
.latex   01;36
.tex 01;36
.lyx 01;36
.m   01;36
.old 00;33 # copias de seguridad en color oscuro para que no molesten
.txt 01;37
.doc 01;37
.rtf 01;37
.html 00;32
.htm 00;32

# Fin del fichero ~/.dir_colors ---------------------------------------------

Con esto, sólo hace falta dar la opción --color al ls para que los listados salgan en color.

4.3 Variables de entorno

Las variables de entorno son unos valores, etiquetados con un nombre (para los que sepan programar: variables de las de toda la vida; el nombre de de entorno es porque definen el entorno de trabajo, no por otra cosa). Convencionalmente, los nombres de las variables se ponen en mayúsculas.

Las variables de entorno tienen tres usos básicos:

  1. Usarlos para escribir menos, o tener valores fijos. Si no entiendes esto, probablemente no te sirva. Tampoco es que se utilicen mucho.
  2. Variables que consulten otros programas. Esto es importante, y estas variables, para que las vean otros programas, tenemos que exportarlas (lo explico luego).
  3. Variables para consultar, que generalmente no se modifican. Por ejemplo, dan información sobre el directorio raíz del usuario.

Algunas variables de entorno interesantes

Exportar variables de entorno

Para exportar variables de entorno, tenemos dos posibilidades:

  1. Declararlas directamente como exportadas, escribiendo algo como:
            export VISUAL=/bin/vi
    
  2. Exportarlas después de haberlas declarado, escribiendo algo como:
            VISUAL=/bin/vi          # Aquí le damos un valor
            # Más cosas
            export VISUAL
    
    Es importante saber que el export soporta más de una variable, o sea, podríamos poner (por comodidad, las variables exportadas no hay que declararlas todas juntas):
            VISUAL=/bin/vi
            LANG=spanish
            # Más órdenes
            export VISUAL LANG
    

Veremos un ejemplo de esto en la última sección (la verdad es que por lo general soy contrario a la enseñanza por ejemplos, pero creo que en este caso no vale la pena complicar las cosas con explicaciones técnicas. Al fin y al cabo, este pequeño manual no es para futuros hackers).

Ejemplos

Dado que mucha gente que lea esto no tendrá ganas (ni probablemente tiempo) como para estar probando hasta que descubra algo, pongo aquí como ejemplo mis ficheros ~/.bash_profile y ~/.bashrc, con la esperanza que descubras cosas al simple vistazo (como por ejemplo, que el caracter ``#'' se utiliza para poner comentarios; es decir, que la máquina los ignora, y no tienes por qué copiarlos si se te ocurre la locura de copiarlos a mano).

Para que tengas por dínde empezar a imaginarte cosas, deberías saber que estos ficheros no son más que órdenes seguidas, una después de otra. Pueden ser asignaciones (dar valores a variables), ejecutar programas (como las líneas de fortune y smiley), etc.

Por cierto, otra de las cosas que deberías saber es que el ``prompt'' es el apuntador que aparece a la espera de que escribas instrucciones (por defecto suele ser un $, o nombreusuario$). En algún sitio de las páginas del manual en línea del bash viene explicado como personalizar el aspecto del apuntador.

Ejemplo de .bash_profile

# ~/.bash_profile: executed by bash(1) for login shells.

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# Escogemos la máscara de permisos que tendrán por defecto
# los ficheros
umask 022

# User specific environment and startup programs

KDEDIR=/opt/kde
PATH=$PATH:/usr/games:$HOME/.bin:$KDEDIR/bin:/usr/local/Office40/bin:\
/usr/local/java/bin:.   # '\' al final es para continuar en otra línea
JAVADIR=/dos/mbros/cambio/java/lib
CLASSPATH=$JAVADIR/fb.zip:$JAVADIR/images.zip:/usr/local/java/lib/classes.zip:.
ENV=$HOME/.bashrc
USERNAME=""
EDITOR=vi
LESS="-rM"
WWW_HOME=http://rohan/zoso/esp.html

export USERNAME ENV PATH EDITOR KDEDIR LESS CLASSPATH WWW_HOME

export LANG=spanish
export LC_ALL=spanish
export LC_CTYPE=ISO_8859_1

Ejemplo de .bashrc

# ~/.bashrc: executed by bash(1) for non-login shells.

# User specific aliases and functions

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Variables
export PS1="\u:\w\\$ "                   # Cambiamos el aspecto del prompt
export DATOS="$HOME/.datos"
export FIGNORE=".o"             # "Extensiones" a ignorar por el ESC-ESC

# Por seguridad, elegimos por defecto que al copiar, se nos pregunte si
# queremos sobreescribir el fichero destino. Lo mismo hacemos con mv
alias cp='cp -i'
alias mv='mv -i'
alias ls='ls --color -lF'
if set | grep DISPLAY &>/dev/null; then
        alias vi="vi -g"
fi

# Instrucción vista en el info, en el nodo 'dircolors invocation', o algo
# así, para que sirva de una vez lo de configurar los colorines en el ls
if [ "$TERM" = "xterm" ]; then
        eval `dircolors $HOME/.xterm.dir_colors`
else
        eval `dircolors $HOME/.dir_colors`
fi

# Imprimimos algunas cosas interesantes en la pantalla
echo
echo "La cita del día:"
fortune
echo " --- "
echo "El smiley del día:"
smiley


Página siguiente Página anterior Índice general