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:

Este guión establece también la variable de entoro INPUTRC que hace que Bash y Readline utilicen el fichero /etc/inputrc creado anteriormente.

Sustituye a continuación [ll] con el código de dos letras del idioma deseado (por ejemplo, “es”) y [CC] con el código de dos letras de tu país (por ejemplo, “ES”). [charmap] debe reemplazarse por el nombre canónico del mapa de caracteres para tu locale elegida.

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

locale -a

Las locales pueden tener una serie de sinónimos, por ejemplo “ISO-8859-15” se referencia también como “iso8859-15” y “iso885915”. Algunas aplicaciones no pueden manejar correctamente los diversos sinónimos, 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 (“es_ES.iso885915” en nuestro ejemplo).

LC_ALL=[nombre de la locale] locale charmap

Para la locale “es_ES.iso885915”, el anterior comando mostrará:

ISO-8859-15

Esto resulta en un ajuste final para la locale de “es_ES.ISO-8859-15”. El 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 country
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 país y el 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 tengas 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::

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

En ocasiones es posible corregir esto eliminando la parte del mapa de caracteres de la especificación de la locale, miestras que esto no cambie el mapa de caracteres que Glbc asocia con la locale (esto puede comprobarse ejecutando el comando locale charmap en ambas locales). Por ejemplo, es posible que tuvieses que cambiar quot;es_ES.ISO-8859-15@euro" por "es_ES@euro" para conseguir que la locale sea reconocida por Xlib.

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"
# Inicio de /etc/profile

export LANG=[ll]_[CC].[charmap]
export INPUTRC=/etc/inputrc

# Fin de /etc/profile
EOF
[Nota]

Nota

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.

Configurar el esquema del teclado, la fuente de pantalla y las variables de entorno relacionadas con las locales son los únicos pasos necesarios para soportar las codificaciones ordinarias de un byte y dirección de escritura de izquierda a derecha. Los casos más complejos (incluidas las locales basadas en UTF-8) necesitan pasos y parches adicionales debido a que muchas aplicaciones tienden a funcionar incorrectamente bajo tales condiciones. Estos pasos y parches no se incluyen en el libro LFS y dichas locales no están soportadas aún por el sistema LFS.