Jak trwale wyeksportować zmienną w systemie Linux?

156

Używam RHEL6 i wyeksportowałem zmienną środowiskową w następujący sposób:

export DISPLAY=:0

Ta zmienna jest tracona, gdy terminal jest zamknięty. Jak mogę dodać to na stałe, aby ta wartość zmiennej zawsze istniała dla określonego użytkownika?

user1340582
źródło

Odpowiedzi:

172

Możesz dodać go do swojego pliku konfiguracyjnego powłoki, np. $HOME/.bashrcLub bardziej globalnie w /etc/environment. Po dodaniu tych linii zmiany nie zostaną natychmiast odzwierciedlone w systemie opartym na GUI, musisz wyjść z terminala lub utworzyć nowy, a na serwerze wylogować się z sesji i zalogować, aby odzwierciedlić te zmiany.

Antoine
źródło
3
Dzięki, to pomocne. Jak mogę wprowadzić zmiany w życie bez ponownego uruchamiania? (Jestem nowicjuszem w Linuksie)
Bitterblue
6
@ mini-me - ~ / bashrc jest pobierane za każdym razem, gdy otwierasz powłokę. Aby załadować go jawnie, użyj sourcenp > source ~/.bashrc. - .
kostja
@kostja Dla wszystkich nowych powłok? Jeśli mam uruchomione eclipse przed zmianą tych zmiennych env i chcę, aby eclipse zmieniło vars, czy muszę ponownie uruchomić eclipse?
Bitterblue
1
@ mini-me: środowisko procesu jest zwykle ustawiane przez wywołującego i zmieniane w trakcie procesu. Zmiana środowiska spoza działającego procesu jest niezwykła i niemożliwa do wykonania export, ale spróbuj z debugerem
Antoine
1
@ Mr.Hyde: Zwykle to nie ma znaczenia. Pliki są analizowane od góry do dołu, więc jeśli definicja var zależy od innej, należy je odpowiednio uporządkować. Więc tak, koniec pliku jest w porządku.
Antoine,
120

Musisz edytować trzy pliki, aby ustawić stałą zmienną środowiskową w następujący sposób:

  • ~ / .bashrc

    Po otwarciu dowolnego okna terminala ten plik zostanie uruchomiony. Dlatego, jeśli chcesz mieć stałą zmienną środowiskową we wszystkich oknach terminala, musisz dodać następujący wiersz na końcu tego pliku:
    export DISPLAY = 0

  • ~ / .profile

  • Tak samo jak bashrc , musisz umieścić wspomnianą linię poleceń na końcu tego pliku, aby zmienna środowiskowa miała miejsce przy każdym logowaniu do systemu operacyjnego.

  • / etc / environment

  • Jeśli chcesz, aby zmienna środowiskowa znajdowała się w każdym oknie lub aplikacji (nie tylko w oknie terminala), musisz edytować ten plik. Dodaj następującą komendę na końcu tego pliku:
    DISPLAY = 0
    Zwróć uwagę, że w tym pliku nie musisz pisać komendy eksportu

Zwykle musisz ponownie uruchomić komputer, aby zastosować te zmiany. Ale możesz zastosować zmiany w bashrc i profilu za pomocą tych poleceń:

$ source ~/.bashrc
$ source ~/.profile

Ale w przypadku / etc / environment nie masz innego wyboru, jak ponowne uruchomienie (o ile wiem)

  • Proste rozwiązanie

  • Napisałem prosty skrypt dla tych procedur, aby wykonać całą tę pracę. Musisz tylko ustawić nazwę i wartość swojej zmiennej środowiskowej.

    #!/bin/bash
    echo "Enter variable name: "
    read variable_name
    echo "Enter variable value: "
    read variable_value
    echo "adding " $variable_name " to environment variables: " $variable_value
    echo "export "$variable_name"="$variable_value>>~/.bashrc
    echo $variable_name"="$variable_value>>~/.profile
    echo $variable_name"="$variable_value>>/etc/environment
    source ~/.bashrc
    source ~/.profile
    echo "do you want to restart your computer to apply changes in /etc/environment file? yes(y)no(n)"
    read restart
    case $restart in
        y) sudo shutdown -r 0;;
        n) echo "don't forget to restart your computer manually";;
    esac
    exit
    

    Zapisz te linie w pliku shfile, a następnie nadaj mu plik wykonywalny i po prostu go uruchom!

    e_soroush
    źródło
    1
    Scenariusz działał bardzo dobrze. Mam zainstalowany Ubuntu 14.04. Ja po prostu wklejone zawartości powyżej pustego pliku o nazwie to insert_var.sh , potem chmod -x insert_var.sh, potem bash insert_var.sh. Dzięki.
    Brunno Vodola Martins
    Otworzyłem okno terminala w Ubuntu i wpisałem eksport MY_VAR = 1. Gdzie będzie przechowywana ta zmienna MY_VAR?
    vgokul129
    29

    dodaj linię do swojego .bashrclub .profile. Zmienne ustawione w $HOME/.profilesą aktywne dla bieżącego użytkownika, te w /etc/profilesą globalne. Ciąg .bashrcjest pobierany przy każdym uruchomieniu sesji basha.

    kostja
    źródło
    27

    W systemach Ubuntu użyj następujących lokalizacji:

    1. Trwałe zmienne obejmujące cały system w formacie JAVA_PATH=/usr/local/javamagazynu

      /etc/environment
      
    2. Trwałe zmienne dla całego systemu, które odwołują się do zmiennych, takich jak
      export PATH="$JAVA_PATH:$PATH"przechowywanie w

      /etc/.bashrc
      
    3. Zmienne trwałe specyficzne dla użytkownika w formacie PATH DEFAULT=/usr/bin:usr/local/binprzechowywania w

      ~/.pam_environment
      

    Aby uzyskać więcej informacji na temat # 2, sprawdź odpowiedź Zapytaj Ubuntu . UWAGA: # 3 to zalecenie Ubuntu, ale może mieć obawy dotyczące bezpieczeństwa w świecie rzeczywistym.

    csi
    źródło
    2

    Konkretny przykład: mam zainstalowaną Javę 7 i Javę 6, potrzebuję uruchomić niektóre kompilacje z 6, inne z 7. Dlatego muszę dynamicznie zmieniać JAVA_HOME, aby maven wybierał to, czego chcę dla każdej kompilacji. Zrobiłem co następuje:

    • stworzyłem j6.shskrypt, który po prostu eksportuje JAVA_HOME=...ścieżkę do instalacji j6 ...
    • następnie, jak sugeruje jeden z powyższych komentarzy, ilekroć potrzebuję J6 do kompilacji, uruchamiam source j6.shw tym odpowiednim terminalu poleceń. Domyślnie my JAVA_HOMEjest ustawione na J7.

    Mam nadzieję że to pomoże.

    Cristian Botiza
    źródło