7.9. Los ficheros de inicio de Bash

El intérprete de comandos /bin/bash (al que nos referiremos como “el intérprete”) utiliza una colección de ficheros de inicio para ayudar a crear un entorno de trabajo. Cada fichero tiene un uso específico y pueden generar diferentes entornos de ingreso o interactivos. Los ficheros del directorio /etc proporcionan ajustes globales. Si existe un fichero diferente en el directorio personal, este puede sobreescribir los ajustes globales.

Un intérprete de ingreso interactivo se inicia tras ingresar en el sistema, usando /bin/login, mediante la lectura del fichero /etc/passwd. Un intérprete interactivo de no ingreso se inicia en la línea de comandos (es decir, [prompt]$/bin/bash). Un intérprete no interactivo está presente usualmente cuando se ejecuta un guión del intérprete de comandos. Es no interactivo porque está procesando un guión y no esperando indicaciones del usuario entre comandos.

Para más información, consulta en info bash la sección Bash Startup Files and Interactive Shells (Ficheros de inicio de Bash e intérpretes interactivos).

Los ficheros /etc/profile y ~/.bash_profile son leidos cuando el intérprete se invoca como un intérprete interactivo de ingreso.

El siguiente fichero /etc/profile básico establece algunas variables de entorno necesarias para el soporte de idioma nativo. Al establecerlas correctamente se obtiene:

Sustituye a continuación <ll> con el código de dos letras del idioma deseado (por ejemplo, “en”) y <CC> con el código de dos letras de tu país (por ejemplo, “GB”). <charmap> debe reemplazarse por el nombre canónico del mapa de caracteres para tu locale elegida. También pueden estar presentes modificadores opcionales como “@euro”.

Puedes obtener la lista de todas las locales soportadas por Glibc ejecutando el siguiente comando:

locale -a

Los mapas de caractéres pueden tener una serie de sinónimos, por ejemplo “ISO-8859-1” se referencia también como “iso8859-1” y “iso88591”. Algunas aplicaciones no pueden manejar correctamente los diversos sinónimos (poe ejemplo, necesitan que “UTF-8” se escriba como “UTF-8”, no “utf8”), por lo que es más seguro elegir el nombre canónico de la locale. Para determinar el nombre canónico, en el que <nombre de la locale> es la salida mostrada por locale -a para tu locale preferida (“en_GB.iso88591” en nuestro ejemplo).

LC_ALL=<nombre de la locale> locale charmap

Para la locale “en_GB.iso88591”, el anterior comando mostrará:

ISO-8859-1

Esto resulta en un ajuste final para la locale de “en_GB.ISO-8859-1”. Es importante que la locale encontrada usando el método anterior sea comprobada antes de añadirla a los ficheros de inicio de Bash:

LC_ALL=<locale name> locale language
LC_ALL=<locale name> locale charmap
LC_ALL=<locale name> locale int_curr_symbol
LC_ALL=<locale name> locale int_prefix

Dichos comandos deberán mostrar los nombres del idioma, la codificación de caracteres usada por la locale, el símbolo de la moneda local y el prefijo a marcar antes del número de teléfono para acceder al país. Si cualquiera de los comandos anteriones fallase con un mensaje similar al mostrado a continuación, esto significa que o tu locale no se instaló en el Capítulo 6, o que no está soportada por la instalación por defecto de Glibc.

locale: Cannot set LC_* to default locale: No such file or directory

Si esto sucede, deberías o bien instalar la locale deseada usando el comando localedef, o considerar la elección de una locale diferente. El resto de instrucciones asumen que no hay mensajes de error procedentes de Glibc.

Algunos paquetes más allá del LFS puede que no tengan soporte para tu locale elegida. Un ejemplo es la librería X (que es parte del sistem X Window), que mostrará el siguiente mensaje de error si la locale no coincide exactamente con uno de los nombres de mapa de caractéres de sus ficheros internos:

Warning: locale not supported by Xlib, locale set to C

En ciertos casos Xlib espera que el mapa de caracteres sea listado en mayúsculas y con guiones. Por ejemplo, "ISO-8859-1" en vez de "iso88591". También es posible encontrar una especificación apropiada eliminando de la especificación de la locale la parte del mapa de caracteres. Esto puede cmprobarse ejecutando el comando locale charmap en ambas locales. Por ejemplo, podrías tener que cambiar "de_DE.ISO-8859-15@euro" por "de_DE@euro" para hacer que Xlib reconociese esta locale.

Otros paquetes también pueden funcionar incorrectamente (pero no necesariamente mostrar un mensaje de error) si el nombre de la locale no cumple sus especificaciones. En estos casos, investigar cómo otras distribuciones Linux soportan tu locale podría proporcionar información útil.

Una vez hayas determinado los ajustes correctos para el idioma, crea el fichero /etc/profile:

cat > /etc/profile << "EOF"
# Begin /etc/profile

export LANG=<ll>_<CC>.<charmap><@modifiers>

# End /etc/profile
EOF

Las locales “C” (la que se tiene por defecto) y “en_US” (la recomendada para los usuarios de habla inglesa de los Estados Unidos) son diferentes. “C” utiliza el grupo de caractéres US-ASCII de 7-bits, y trata bytes con el bit alto establecido como caracter inválido. Esto es por lo que, por ejemplo, el comando ls los sustituye con interrogantes en dicha locale. También, un intento de enviar correo con dichos caractéres desde Mutt o Pine resulta en que se envie un mensaje de no conformancia con RFC (el grupo de caractéres en el mensaje de salida se indoca como “desconocido de 8-bit”). Por tanto puedes usar la locale “C” sólo si estás seguro de que núnca necesitarás caractéres de 8-bits.

Las locales basadas en UTF-8 no están bien soportadas por muchos programas. Por ejemplo, el programa watch mustra sólo caractéres ASCII en locales UTF-8 y no tiene dicha restricción en locales tradicionales de 8-bits como en_US. Se está trabajando en documentar, y si es posible corregir, dichos problemas. Mira http://www.linuxfromscratch.org/blfs/view/svn/introduction/locale-issues.html.