Hur lägger jag till miljövariabler?

Jag kör Ubuntu 11.04. Jag använder terminalen för att starta en bash-session och jag vill lägga till en miljövariabel:

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

Men det fungerar inte. Den visar alla variabler med THEVAR som den sista, men ett annat anrop till env visar inte THEVAR längre - env | grep THEVAR ger ingenting.

På samma sätt lägger skript med export (export THEVAR=/example) eller andra variabeltilldelningar (THEVAR=/example) inte till miljövariabeln.

Jag vet att jag gör något fel, jag vet att det borde vara något enkelt, men jag kan inte hitta vad.

UPDATE: Den verkliga innebörden av min fråga var denna: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell

(Jag väljer i alla fall det mest röstade svaret och lämnar den redigerade titeln - det var inte det jag frågade).

env kör ett program i en modifierad miljö och avfärdar sedan alla ändringar.

Lösning

För att ställa in variabeln något för det aktuella skalet:

VARNAME="my value"

För att ställa in den för det aktuella skalet och alla processer som startas från det aktuella skalet:

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

För att ställa in den permanent för alla framtida bash-sessioner, lägg till en sådan rad i filen .bashrc i din $HOME-katalog.

För att ställa in den permanent och systemövergripande (alla användare, alla processer) lägg till variabeln set i /etc/environment:

sudo -H gedit /etc/environment

Den här filen accepterar endast variabeltolkningar som:

VARNAME="my value"

Använd inte nyckelordet export här.

Du måste logga ut från den nuvarande användaren och logga in igen så att miljövariablerna ändras.

Kommentarer (7)

Om du vill ställa in en miljövariabel en gång använder du kommandot export i prompten, inte i ett skalskript:

$ export THEVAR=/example

Variabeln kommer att vara inställd för resten av skalet eller tills den inte längre är inställd.

För att ställa in en miljövariabel varje gång, använd kommandot export i filen .bashrc (eller lämplig initialiseringsfil för ditt skal).

Om du vill ställa in en miljövariabel från ett skript använder du kommandot export i skriptet och sedan source skriptet. Om du utför skriptet kommer det inte att fungera.

För en förklaring av skillnaden mellan sourcing och executing se detta svar: https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-script/176788#176788

Kommentarer (1)

För att permanent lägga till en ny miljövariabel i Ubuntu (endast testat i 14.04), använd följande steg:

  1. Öppna en terminal (genom att trycka på CtrlAltT).
  2. sudo -H gedit /etc/environment.
  3. Skriv in ditt lösenord
  4. Redigera textfilen som just öppnades: Om du t.ex. vill lägga till FOO=bar skriver du bara FOO=bar på en ny rad.
  5. Spara den.
  6. När du har sparat loggar du ut och loggar in igen.
  7. De ändringar som du vill göra är gjorda.
Kommentarer (5)