Hvorfor du ikke bør sætte miljøvariabler i ~/.bashrc eller altid starte login shells i terminaler

Hvorfor er det en dårlig idé at sætte miljøvariabler i ~/.bashrc eller altid starte login shells i terminaler? Hvis en miljøvariabel som JAVA_HOME skal tilføjes til PATH, hvor er det bedst at placere export-indgangen: i ~/.bash_profile eller ~/.bashrc? Hvis svaret er ~/.bash_profile, hvad bør så placeres i ~/.bashrc? I en non-login shell, vil ~/.bash_profile ikke blive "hentet". Hvis JAVA_HOME er eksporteret i ~/.bash_profile, vil javac og java kommandoer så kunne udføres? Er det derfor nogle indlæg og fora foreslår at sætte JAVA_HOME i ~/.bashrc?

At sætte miljøvariabler i ~/.bashrc eller altid starte login shells i terminaler kan føre til redundans, inkonsistens og sværere fejlfinding. Det er bedst at placere export-indgangen i ~/.bash_profile for at reducere redundans og øge effektiviteten.

Hvorfor er det en dårlig idé at sætte miljøvariabler i ~/.bashrc eller altid starte login shells i terminaler?

At sætte miljøvariabler i ~/.bashrc eller altid starte login shells i terminaler kan være problematisk af flere grunde:

  • Redundans: Hver gang en ny terminal åbnes, vil ~/.bashrc blive kørt, hvilket kan føre til redundans og unødvendig belastning.
  • Inkonsekvens: Ikke alle shells er login shells, hvilket kan føre til inkonsistens i miljøvariablerne, hvis de kun er sat i ~/.bashrc.
  • Fejlfinding: Det kan være sværere at fejlsøge miljøvariabler, da de kan blive overskrevet eller ændret flere gange.

Hvor er det bedst at placere export-indgangen: i ~/.bash_profile eller ~/.bashrc?

Det er bedst at placere export-indgangen i ~/.bash_profile af følgende grunde:

  • Login Shells: ~/.bash_profile køres kun for login shells, hvilket betyder, at miljøvariablerne kun sættes én gang pr. session.
  • Effektivitet: Dette reducerer redundans og gør systemet mere effektivt.

Hvad bør placeres i ~/.bashrc?

I ~/.bashrc bør du placere kommandoer og indstillinger, der skal anvendes hver gang en ny shell åbnes, såsom:

  • Alias'er
  • Shell-specifikke funktioner
  • Prompt-indstillinger

Vil javac og java kommandoer kunne udføres i en non-login shell, hvis JAVA_HOME er eksporteret i ~/.bash_profile?

Nej, i en non-login shell vil ~/.bash_profile ikke blive "hentet". Derfor vil javac og java kommandoerne ikke kunne udføres, hvis JAVA_HOME kun er eksporteret i ~/.bash_profile.

Er det derfor nogle indlæg og fora foreslår at sætte JAVA_HOME i ~/.bashrc?

Ja, nogle indlæg og fora foreslår at sætte JAVA_HOME i ~/.bashrc for at sikre, at miljøvariablen er tilgængelig i både login og non-login shells. Dette kan dog føre til redundans og ineffektivitet, som nævnt tidligere.

En bedre løsning kan være at inkludere følgende linje i din ~/.bash_profile:

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

Dette sikrer, at ~/.bashrc også køres for login shells, hvilket giver en mere konsistent og effektiv opsætning.