9.7. Os Arquivos de Inicialização do Shell Bash

O aplicativo de shell /bin/bash (daqui por diante referenciado como o shell) usa uma coleção de arquivos de iniciação para auxiliar a criar o ambiente para executar dentro. Cada arquivo tem um uso específico e possivelmente afete o login e ambientes interativos diferentemente. Os arquivos no diretório /etc fornecem configurações globais. Se arquivos equivalentes existirem no diretório lar, [então] eles possivelmente substituam as configurações globais.

Um shell de login interativo é iniciado depois de um login bem sucedido, usando o /bin/login, lendo o arquivo /etc/passwd. Um shell de não-login interativo é iniciado na linha de comando (por exemplo, [prompt]$/bin/bash). Um shell não-interativo geralmente está presente quando um script de shell está executando. Ele é não-interativo porque ele está processando um script e não esperando pela entrada gerada de usuário(a) entre comandos.

Para mais informação, vejam-se as seções Bash Startup Files e Interactive Shells no capítulo Bash Features das páginas info do Bash (info bash).

Os arquivos /etc/profile e ~/.bash_profile são lidos quando o shell é invocado como um shell de login interativo.

O /etc/profile de base abaixo configura algumas variáveis de ambiente necessárias para o suporte ao idioma nativo. Configurá-las adequadamente resulta em:

Substitua <ll> abaixo pelo código de duas letras para o idioma desejado (por exemplo, en) e <CC> pelo código de duas letras para o país apropriado (por exemplo, GB). <charmap> deveria ser substituído pelo mapa de caracteres canônico para seu locale escolhido. Modificadores opcionais, tais como @euro, possivelmente também estejam presentes.

A lista de todos os locales suportados pela Glibc pode ser obtida executando-se o seguinte comando:

locale -a

Mapas de caracteres podem ter um número de apelidos, por exemplo, ISO-8859-1, também é referenciado como iso8859-1 e iso88591. Alguns aplicativos não conseguem lidar com os vários sinônimos corretamente (por exemplo, exigem que UTF-8 seja escrito como UTF-8, não utf8), de forma que é mais seguro, na maioria dos casos, escolher o nome canônico para um locale específico. Para determinar o nome canônico, execute o seguinte comando, onde <nome do locale> é a saída gerada dada por locale -a para seu locale preferido (en_GB.iso88591 no nosso exemplo).

LC_ALL=<nome do locale> mapa de caracteres do locale

Para o locale en_GB.iso88591, o comando acima imprimirá:

ISO-8859-1

Isso resulta em uma configuração final de locale de en_GB.ISO-8859-1. É importante que o locale encontrado usando-se a heurística acima seja testado antes que ele seja adicionado aos arquivos de inicialização do Bash:

LC_ALL=<nome do locale> locale language
LC_ALL=<nome do locale> locale charmap
LC_ALL=<nome do locale> locale int_curr_symbol
LC_ALL=<nome do locale> locale int_prefix

Os comandos acima deveriam imprimir o nome do idioma, a codificação de caracteres usada pelo locale, a moeda local, e o prefixo para discar antes do número de telefone para a finalidade de se alcançar o país. Se quaisquer dos comandos acima falhar com uma mensagem similar àquela mostrada abaixo, [então] isso significa que seu locale ou não foi instalado no Seção 8.5, “Glibc-2.37” ou não é suportado pela instalação padrão da Glibc.

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

Se isso acontecer, [então] você deveria ou instalar o locale desejado usando o comando localedef, ou considerar escolher um locale diferente. As instruções posteriores assumem que não existem tais mensagens de erro originárias da Glibc.

Outros pacotes também possivelmente funcionem incorretamente (mas, não necessariamente exibirão quaisquer mensagens de erro) se o nome do locale não corresponder às expectativas deles. Nesses casos, investigar como outras distribuições do Linux suportam seu locale poderia fornecer alguma informação útil.

Uma vez que as configurações adequadas de locale tenham sido determinadas, crie o arquivo /etc/profile:

cat > /etc/profile << "EOF"
# Início do /etc/profile

export LANG=<ll>_<CC>.<mapa_de_caracteres><@modificadores>

# Fim do /etc/profile
EOF

Os locales C (padrão) e en_US.utf8 (aquele recomendado para usuários(as) do inglês dos Estados Unidos da América do Norte) são diferentes. C usa o conjunto de caracteres de 7 bits US-ASCII e trata bytes com o bit de ordem alta configurado on como caracteres inválidos. Esse é o porquê, por exemplo, do comando ls exibi-los como pontos de interrogação nesse locale. Também, uma tentativa de enviar correio com tais caracteres a partir do Mutt ou do Pine resulta em mensagens de não conformidade com RFC sendo enviadas (o conjunto de caracteres no correio de saída é indicado como unknown 8-bit). Portanto, você somente pode usar o locale C se você tiver certeza de que nunca precisará de caracteres de 8 bits.

Locales baseados em UTF-8 não são bem suportados por alguns aplicativos. Trabalho está em progresso para documentar e, se possível, corrigir tais problemas. Veja-se https://www.linuxfromscratch.org/blfs/view/11.3/introduction/locale-issues.html.