Vraag Hoe voeg ik omgevingsvariabelen toe?


Ik run Ubuntu 11.04. Ik gebruik de terminal om een ​​bash-sessie te starten en ik wil een omgevingsvariabele toevoegen:

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

Maar het werkt niet. Het toont alle variabelen waarbij THEVAR de laatste is, maar een andere oproep aan env Wordt niet weergegeven THEVAR rampzalig meer env | grep THEVAR geeft niets terug.

Evenzo scripts met export (export THEVAR=/example) of andere variabele toewijzingen (THEVAR=/example) voeg de omgevingsvariabele niet toe.

Ik weet dat ik iets verkeerd doe, ik weet dat het iets eenvoudigs moet zijn, maar ik kan gewoon niet vinden wat.

BIJWERKEN: De echte betekenis van mijn vraag was deze: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell

(Hoe dan ook, ik kies het meest gestemde antwoord en verlaat de bewerkte titel -dat was niet wat ik vroeg)

env voert een programma uit in een aangepaste omgeving en negeert vervolgens alle wijzigingen.


224
2017-08-27 00:22


oorsprong


Als het wordt gedefinieerd / geëxporteerd in .bashrc, werkt het correct. - huff
mogelijk duplicaat van Google Earth en $ BROWSER omgevingsvariabele - Isaiah
Wat dacht je van THEVAR=/example? - Oleh Prypin
De andere gaat over globale variabelen, deze voegt niet zo'n beperking toe. Ik zou het gescheiden houden. - Lekensteyn
help.ubuntu.com/community/EnvironmentVariables - huff


antwoorden:


Om de variabele in te stellen enkel en alleen voor huidige shell:

VARNAME="my value"

Om het in te stellen voor de huidige shell en alle processen gestart vanuit de huidige shell:

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

Om het in te stellen blijvend voor alle toekomstige bash-sessies voeg je zo'n regel toe aan je .bashrc bestand in uw $HOME directory.

Om het permanent in te stellen, en systeem breed (alle gebruikers, alle processen) set-variabele toevoegen in / etc / environment:

sudo -H gedit /etc/environment

Dit bestand accepteert alleen variabeloewijzingen zoals:

VARNAME="my value"

Gebruik de export sleutelwoord hier.

U moet opnieuw inloggen van de huidige gebruiker en opnieuw inloggen, zodat wijzigingen in de omgevingsvariabelen plaatsvinden.


363
2017-08-27 07:50



Shell config files such as ~/.bashrc, ~/.bash_profile, and ~/.bash_login are often suggested for setting environment variables. While this may work on Bash shells for programs started from the shell, variables set in those files are not available by default to programs started from the graphical environment in a desktop session.  help.ubuntu.com/community/EnvironmentVariables - SudoSURoot
Waar moet ik mijn specifieke regel toevoegen ?! onderaan de .bashrc-pagina ?! - Mr.Hyde
@ Mr.Hyde ja, dat is waarschijnlijk een redelijke plaats - Michał Šrajer
Waarom is de tweede minder draagbaar? - UniversallyUniqueID
@BharadwajRaju omdat op sommige oude UNIX-systemen alleen de variabele kan worden geëxporteerd die al is ingesteld. Oude Solaris en HP-UX bijvoorbeeld. - Michał Šrajer


Als u eenmaal een omgevingsvariabele wilt instellen, gebruikt u de export commando in de prompt, niet in een shellscript:

$ export THEVAR=/example

De variabele wordt ingesteld voor de rest van de shell-sessie of totdat deze is uitgeschakeld.

Om een ​​omgevingsvariabele altijd in te stellen, gebruikt u de export commando in de .bashrc bestand (of het juiste initialisatiebestand voor uw shell).

Om een ​​omgevingsvariabele van een script in te stellen, gebruikt u de export commando in het script en dan source het script. Als je het script uitvoert, zal het niet werken.

Zie dit antwoord voor een verklaring van het verschil tussen sourcing en uitvoeren https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-script/176788#176788


21
2017-08-27 07:20



Hoe kan ik het alleen laten werken door het script uit te voeren? Zonder sourcing. - Mithril


Om een ​​nieuwe omgevingsvariabele permanent toe te voegen in Ubuntu (alleen getest in 14.04), volg je de volgende stappen:

  1. Open een terminal (door op te drukken CtrlaltT)
  2. sudo -H gedit /etc/environment
  3. Voer uw wachtwoord in
  4. Bewerk het zojuist geopende tekstbestand:
    bijv. als je wilt toevoegen FOO=bar, schrijf dan gewoon FOO=bar in een nieuwe regel
  5. Bewaar het
  6. Eenmaal opgeslagen, log uit en log opnieuw in.
  7. De gewenste wijzigingen worden aangebracht.

15
2017-12-07 08:45



Ik heb je antwoord opgeschoond en de gevaarlijkere dingen eruit gehaald sudo gedit (Zien askubuntu.com/questions/270006/...) en chmod 777. Dit laatste zou nooit gedaan moeten worden in een systeemconfiguratiebestand. - muru
Dit is een goed antwoord voor bepaalde gevallen. Alle sessies, of gebruikersshell-sessies of niet, krijgen de waarde van variabelen die hier zijn ingesteld. Het is belangrijk op te merken dat hoewel dit eruit ziet als een shellscript, dit dit niet is - je kunt alleen omgevingsvariabelen instellen (in plaats van shell-functies zoals if of test) - Tom Harrison Jr
Als balk een tekenreeks is, moet ik dit tussen aanhalingstekens plaatsen? Graag willen Foo="bar"? - blue_chip
@blue_chip Nee, werkt zonder aanhalingstekens. - Click Upvote
@blue_chip voor omgevingsvariabelen, alles is een tekenreeks. U hebt alleen aanhalingstekens nodig als deze spaties bevat. - Ruslan


Om de wijzigingen in de omgeving / var te behouden nadat het script is voltooid, moet je gebruikensource ./script.sh of de verkorte notatie voor bron, ".", zoals . ./script.sh

Source voert de opdrachten in het script uit alsof je ze hebt ingetypt ... dus het verandert sommige aspecten van het script, zoals afsluiten ... dus als je script iets controleert en besluit af te sluiten als false, bijvoorbeeld, via bellen exit 0, het zal uw huidige terminal / shell-sessie beëindigen.


3
2018-03-16 15:09



Dit is een zeer oude vraag die al een geaccepteerd antwoord en een paar andere heeft ... Overweeg om recentere vragen te beantwoorden, alstublieft ... - NerdOfCode
@NerdOfCode dit antwoord pakt een probleem aan dat is nog steeds relevant en geen van de andere antwoorden, inclusief de geaccepteerde, vermeld het, voor zover ik kan zien ... Er zijn in feite twee insignes beschikbaar om goede antwoorden te geven op oude vragen, dus dit wordt aangemoedigd - Zanna


Als je dingen doet via script, wordt een eenvoudige manier om de omgevingsvariabele permanent in te stellen onder de verklaring in je script gezet,

if [[ ! -d "$MyVar" ]]; then 
    export MyVar="abc"
    echo 'export MyVar="abc"' >> ~/.bashrc
fi

Als u uitdrukkingen zoals pwd wilt evalueren, kunt u dit bijvoorbeeld gebruiken

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc

1
2017-07-12 02:06