9.7. Oppstartsfilene til Bash skallet

Skallprogrammet /bin/bash (heretter referert som skallet) bruker en samling oppstartsfiler for å hjelpe til å lag et miljø å kjøre i. Hver fil har en spesifikk bruk og kan påvirke pålogging og interaktive miljøer annerledes. Filene i /etc mappen gir globale innstillinger. Hvis en tilsvarende fil finnes i hjemmemappen, kan den overstyre de globale innstillingene.

Et interaktivt påloggingsskall startes etter en vellykket pålogging ved hjelp av /bin/login, ved å lese /etc/passwd filen. Et interaktivt ikke-påloggingsskall startet på kommandolinjen (f.eks., [prompt]$/bin/bash). Et ikke-interaktiv skall er vanligvis tilstede når et skallskript kjører. Det er ikke-interaktivt fordi det behandler et skript og ikke venter på brukerinndata mellom kommandoer.

For mer informasjon, se info bash under Bash Startup Files and Interactive Shells seksjonen.

Filene /etc/profile og ~/.bash_profile leses når skallet er startet som et interaktivt påloggingsskall.

Grunnfilen /etc/profile nedenfor setter noen miljøvariabler som er nødvendige for morsmålsstøtte. Å sette de riktig resulterer i:

Erstatt <ll> nedenfor med koden på to bokstaver for ønsket språk (f.eks., en) og <CC> med tobokstavskoden for det aktuelle land (f.eks., GB). <charmap> bør erstattes med den kanoniske tegntabellen for din valgte lokalitet. Valgfri modifikatorer som f.eks @euro kan også være tilstede.

Listen over alle lokaliteter som støttes av Glibc kan fås ved å kjøre følgende kommando:

locale -a

Tegntabeller kan ha en rekke aliaser, f.eks., ISO-8859-1 er også referert til som iso8859-1 og iso88591. Noen applikasjoner kan ikke håndtere de forskjellige synonymene riktig (f.eks. kreves det at UTF-8 er skrevet som UTF-8, ikke utf8), så det er tryggest i de fleste tilfeller for å velge det kanoniske navnet for en bestemt lokalitet. Å bestemme det kanoniske navnet, kjør følgende kommando, hvor <locale name> er utdataen gitt av locale -a til din foretrukne lokalitet (en_GB.iso88591 i vårt eksempel).

LC_ALL=<locale name> locale charmap

For en_GB.iso88591 lokaliteten, kommandoen over vil skrive ut:

ISO-8859-1

Dette resulterer i en endelig lokaleinnstilling på en_GB.ISO-8859-1. Det er viktig at lokaliteten funnet ved hjelp av heuristikken ovenfor testes på forhånd før det legges til Bash oppstartsfilene:

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

Kommandoene ovenfor skal skrive ut språknavnet, tegnkoding som brukes av lokaliteten, den lokale valutaen og prefikset før telefonnummeret for å ringe inn i landet. Hvis noen av kommandoene ovenfor mislykkes med en melding som ligner på den som vises nedenfor, betyr dette at lokaliteten din enten ikke var installert i Section 8.5, “Glibc-2.36” eller ikke støttes av standardinstallasjonen av Glibc.

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

Hvis dette skjer, bør du enten installere ønsket lokalitet ved å bruke localedef kommandoen, eller vurder å velge en annen lokalitet. Ytterligere instruksjoner forutsetter at det ikke er slike feilmeldinger fra Glibc.

Andre pakker kan også fungere feil (men kanskje ikke nødvendigvis vise eventuelle feilmeldinger) hvis lokalenavnet ikke oppfyller deres forventninger. I disse tilfellene, å undersøke hvordan andre Linux distribusjoner støtter lokaliteten din kan gi noe nyttig informasjon.

Når de riktige lokale innstillingene er bestemt, oppretter du /etc/profile filen:

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

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

# End /etc/profile
EOF

C (standard) og en_US.utf8 (det anbefalte for engelske brukere i USA) lokalitetene er forskjellige. C bruker US-ASCII 7-biters tegnsett, og behandler byte med det høye bitsettet som ugyldige tegn. Det er derfor, f.eks ls kommandoen erstatter dem med spørsmålstegn i det lokalet. Også et forsøk på å sende post med slike tegn fra Mutt eller Pine resulterer i ikke-RFC samsvars meldinger som sendes (tegnsettet i den utgående posten er indikert som unknown 8-bit). Så du kan bruke C bare hvis du er sikker på at du aldri trenger 8-bits tegn.

UTF-8 baserte lokaliteter støttes ikke godt av noen programmer. Det pågår arbeid med å dokumentere og om mulig fikse slike problemer, se https://www.linuxfromscratch.org/blfs/view/11.2/introduction/locale-issues.html.