Hvordan angir jeg en brukermiljøvariabel? (permanent, ikke økt)

Dette irriterer meg. Jeg har sett flere forslag (alle med forskjellige filer og syntaks), og ingen av dem fungerte.

Hvordan setter jeg en miljøvariabel for en bestemt bruker? Jeg bruker debian squeeze. Hva er den nøyaktige syntaksen jeg skal legge inn i filen for å gjøre ABC = "123"?

Løsning

Du må legge inn deklarasjonen i initialiseringsfilene til skallet ditt:

  • Hvis du bruker bash, ash, ksh eller et annet Bourne-lignende skall, kan du legge til

     ABC="123"; eksport ABC

i filen .profile (${HOME}/.profile). Dette er standardsituasjonen på de fleste Unix-installasjoner, og spesielt på Debian.

Hvis innloggingsskallet ditt er bash, kan du bruke .bash_profile (${HOME}/.bash_profile) eller .bash_login i stedet.

Note: Hvis en av disse filene finnes og innloggingsskallet ditt er bash, leses ikke .profile når du logger inn via ssh eller på en tekstkonsoll, men den kan likevel bli lest i stedet for .bash_profile hvis du logger inn fra det grafiske brukergrensesnittet. Hvis det ikke finnes noen .bash_profile, bruker du .bashrc.

  • Hvis du har angitt zsh som påloggingsskall, bruker du ~/.zprofile i stedet for ~/.profile.

  • Hvis du bruker tcsh, legger du til

     setenv ABC "123"

i .login-filen (${HOME}/.login)

  • hvis du bruker et annet skall, se i skallmanualen hvordan du definerer miljøvariabler og hvilke filer som kjøres ved oppstart av skallet.
Kommentarer (12)

Dette er en generell prosedyre du kan bruke for stort sett alle skall. Du må uansett vite hvilket skall brukeren vanligvis logger inn med:

path="$(grep $USER /etc/passwd | cut -d ':' -f 7)"
shell="$(basename -- "$path")"

Deretter må du finne ut hvilke dot-filer dette skallet normalt vil lese:

man $shell

En snarvei som kan fungere, er å liste opp de dot-filene som inneholder navnet på skallet:

ls ~/.*${shell}*

Hvis du vil sjekke om en av filene faktisk leses under innlogging, kan du ganske enkelt skrive ut filnavnet i hver av dem, for eksempel:

echo .bashrc

Når du logger inn, bør du da se hvilke filer som leses, og du kan bestemme hvilken du vil endre. Vær oppmerksom på at du ikke bør prøve å bruke echo "$0" eller lignende, fordi verdien av $0 avhenger av hvordan skallet behandler dot-filer, og kan være misvisende.

Når det gjelder å erklære variabelen "permanent", må du være oppmerksom på at dette bare gjelder for økten. Det er ikke mulig å få tilgang til verdien av en variabel uten en økt, så den har ingen betydning utenfor en økt. Hvis du mener "skrivebeskyttet", er det skallavhengig, og i Bash kan du bruke:

declare -r VAR

hvis den allerede har en verdi, eller

declare -r VAR=value

for å tilordne den samtidig. Ikke alle skjell har denne funksjonen.

For å deklarere en variabel i de fleste skjell bør du bruke et variabelnavn ([A-Za-z_][A-Za-z0-9_]*), etterfulgt av et likhetstegn (og ingen mellomrom rundt likhetstegnet), deretter en verdi (helst med anførselstegn, med mindre verdien er en enkel [A-Za-z0-9_]+). For eksempel:

name="John Doe"
ip=127.0.0.1
HORRIBLE=1
Kommentarer (0)

Bruk eksport.

export ABC="123"

For å sjekke om den er angitt, bruk

env

og/eller

env | grep ABC

Hvis du vil legge den til permanent, legger du til dette i filen ~/.bashrc.

export ABC="123"
Kommentarer (6)