Ako pridám premenné prostredia?

Používam Ubuntu 11.04. Používam terminál na spustenie relácie bash a chcem pridať premennú prostredia:

$r@hajt:~$ env THEVAR=/example

Ale nefunguje to. Zobrazia sa všetky premenné, pričom THEVAR je posledná, ale pri ďalšom volaní env sa už THEVAR nezobrazí - env | grep THEVAR nevráti nič.

Podobne skripty s exportom (export THEVAR=/example) alebo iným priradením premennej (THEVAR=/example) nepridajú'premennú prostredia.

Viem, že niečo robím zle, viem, že by to malo byť niečo jednoduché, ale jednoducho nemôžem nájsť čo.

UPDATE: Skutočný význam mojej otázky bol tento: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell

(Každopádne vyberiem najhlasovanejšiu odpoveď a nechám upravený názov -to nebolo to, na čo som sa pýtal)

env spustí program v upravenom prostredí a potom všetky zmeny zruší.

Riešenie

Nastavenie premennej len pre aktuálny shell:

VARNAME="my value"

Ak ju chcete nastaviť pre aktuálny shell a všetky procesy spustené z aktuálneho shellu:

export VARNAME="my value"      # shorter, less portable version

Ak ho chcete nastaviť trvalo pre všetky budúce relácie bash, pridajte takýto riadok do súboru .bashrc v adresári $HOME.

Ak ju chcete nastaviť natrvalo a v celom systéme (všetci používatelia, všetky procesy), pridajte premennú set do /etc/environment:

sudo -H gedit /etc/environment

Tento súbor akceptuje iba priradenia premenných ako:

VARNAME="my value"

Nepoužívajte tu kľúčové slovo export.

Musíte sa odhlásiť od aktuálneho používateľa a znova sa prihlásiť, aby sa uskutočnili zmeny premenných prostredia.

Komentáre (7)

Ak chcete premennú prostredia nastaviť len raz, použite príkaz export vo výzve, nie v skripte shellu:

$ export THEVAR=/example

Premenná bude nastavená po zvyšok relácie shellu alebo kým nebude zrušená.

Ak chcete nastaviť premennú prostredia vždy, použite príkaz export v súbore .bashrc (alebo v príslušnom inicializačnom súbore pre váš shell).

Ak chcete nastaviť premennú prostredia zo skriptu, použite príkaz export v skripte a potom skript source. Ak skript spustíte, nebude fungovať.

Vysvetlenie rozdielu medzi zdrojovaním a spustením nájdete v tejto odpovedi: https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-script/176788#176788

Komentáre (1)

Ak chcete trvalo pridať novú premennú prostredia v Ubuntu (testované len v 14.04), postupujte nasledovne:

  1. Otvorte terminál (stlačením CtrlAltT)
  2. sudo -H gedit /etc/environment
  3. Zadajte svoje heslo
  4. Upravte práve otvorený textový súbor: Ak chcete pridať FOO=bar, potom stačí napísať FOO=bar do nového riadku
  5. Uložte ho
  6. Po uložení sa odhláste a znovu prihláste.
  7. Vaše požadované zmeny sú vykonané.
Komentáre (5)