Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: environment variables worden niet gedefineerd  (gelezen 3161 keer)

environment variables worden niet gedefineerd
« Gepost op: 2012/02/29, 22:52:24 »
Hi all,

Ben nu met Mint aan het rommelen, en ik vroeg mij af waar ik moet kijken om het volgende op te lossen.

export hi="hoi"
Dit werkt in de huidige shell (echo $hi)
Open in een nieuwe shell, schijnt de variable niet gedefineerd te zijn, echo $hi laat nu niks zien.

Waar moet ik de env variables "enablen" ?
Ik praat niet te snel, je luisterd te langzaam ;-)

Offline Bloom

  • Lid
Re: environment variables worden niet gedefineerd
« Reactie #1 Gepost op: 2012/02/29, 23:47:48 »
Enviroment variables zijn altijd lokaal. Je kunt wel variabelen beperkt globaal maken, d.w.z. vanuit een parent naar kindprocessen. En dat doe je met export.
$ hi="hoi"
$ echo $hi
hoi
$ bash
$echo $hi

$exit
Een lokale variabele in de parent is dus niet zichtbaar in een kindproces. Met export kan dat dus wel:
$ export hi="hoi"
$ echo $hi
hoi
$ bash
$echo $hi
hoi
$exit
En zo is de geëxporteerde variabele dus globaal vanuit de parent naar de kindprocessen beschikbaar.

Als je een bepaalde variabele beschikbaar wil hebben voor eender welke shell die je opent vanaf de desktop, dan kun je die variabele invullen in .bashrc. Dan is die beschikbaar in iedere bash shell die je opent.

Re: environment variables worden niet gedefineerd
« Reactie #2 Gepost op: 2012/03/01, 08:14:19 »
Enviroment variables zijn altijd lokaal. Je kunt wel variabelen beperkt globaal maken, d.w.z. vanuit een parent naar kindprocessen. En dat doe je met export.
$ hi="hoi"
$ echo $hi
hoi
$ bash
$echo $hi

$exit
Een lokale variabele in de parent is dus niet zichtbaar in een kindproces. Met export kan dat dus wel:
$ export hi="hoi"
$ echo $hi
hoi
$ bash
$echo $hi
hoi
$exit
En zo is de geëxporteerde variabele dus globaal vanuit de parent naar de kindprocessen beschikbaar.

Als je een bepaalde variabele beschikbaar wil hebben voor eender welke shell die je opent vanaf de desktop, dan kun je die variabele invullen in .bashrc. Dan is die beschikbaar in iedere bash shell die je opent.


Dit zou inderdaad zo moeten werken, maar dat doet het dus niet. Dat is het vreemde.

Als ik hi export, dan wordt hij niet zichtbaar in het childprocess. Snap niet waarom
Ik praat niet te snel, je luisterd te langzaam ;-)

Re: environment variables worden niet gedefineerd
« Reactie #3 Gepost op: 2012/03/01, 10:54:28 »
Een nieuwe shell is geen childprocess. Om de variabele te gebruiken in elke gebruikersshell, kan deze zoals Bloom zei onderaan ~/.bashrc gezet worden.

Re: environment variables worden niet gedefineerd
« Reactie #4 Gepost op: 2012/03/01, 11:02:09 »
Een nieuwe shell is geen childprocess. Om de variabele te gebruiken in elke gebruikersshell, kan deze zoals Bloom zei onderaan ~/.bashrc gezet worden.

Ook niet wanneer de shell wordt geopend vanuit de huidige shell ?

EDIT: snap hem, alleen wat zou dan een goed voorbeeld zijn van een export, in gebruik bedoel ik.
« Laatst bewerkt op: 2012/03/01, 11:11:27 door marc heijerman »
Ik praat niet te snel, je luisterd te langzaam ;-)

Offline Bloom

  • Lid
Re: environment variables worden niet gedefineerd
« Reactie #5 Gepost op: 2012/03/01, 12:40:20 »
Als de shell geopend wordt vanuit de huidige shell, dan is het een kindproces en "erft" het dus een geëxporteerde variabele.

$ export hi="hoi"
gnome-terminal &

Er wordt nu een tweede terminalvenster geopend op de Gnome of Unity desktop.

In die nieuwe terminal typen:
$ echo $hizal "hoi" teruggeven.

Re: environment variables worden niet gedefineerd
« Reactie #6 Gepost op: 2012/03/01, 13:28:31 »
Hier een screenshot:

Ik praat niet te snel, je luisterd te langzaam ;-)

Offline Bloom

  • Lid
Re: environment variables worden niet gedefineerd
« Reactie #7 Gepost op: 2012/03/01, 13:31:16 »
Het is export hi, niet export $hi!

$hi is de INHOUD van de variabele hi, hi is de variabele zelf. En je exporteert de variable, niet de inhoud!

Re: environment variables worden niet gedefineerd
« Reactie #8 Gepost op: 2012/03/01, 13:35:16 »
Het is export hi, niet export $hi!

$hi is de INHOUD van de variabele hi, hi is de variabele zelf. En je exporteert de variable, niet de inhoud!

hmz...

$ export hi="hoi"; xfce4-terminal &

echo $hi
nog steeds niks.



eerst echo $hi in de nieuwe terminal gedaan, niks. Daarna in de eerste terminal, deze sluit de nieuwe terminal dus af na echo $hi
« Laatst bewerkt op: 2012/03/01, 13:44:14 door marc heijerman »
Ik praat niet te snel, je luisterd te langzaam ;-)

Offline Bloom

  • Lid
Re: environment variables worden niet gedefineerd
« Reactie #9 Gepost op: 2012/03/01, 15:12:55 »
Ik heb even zitten proberen in een XFCE desktop en die gedraagt zich inderdaad anders dan Gnome.
Mijn vermoeden is, dat het openen van een nieuwe terminal in xfce geen kindproces van die eerste terminal is, maar van de desktop zelf. Dan zou je geen variabelen in een terminal kunnen definiëren en die dan doorspelen aan een andere xfce4-terminal.
Je kunt het dan weer doen in ~/.bashrc als tenminste je hoofdshell inderdaad bash is. Vaak is dat dash en die negeert dat bestand. In dat geval kun je het ook doen in ~/.xinitrc.

Re: environment variables worden niet gedefineerd
« Reactie #10 Gepost op: 2012/03/01, 15:49:16 »
Ik heb even zitten proberen in een XFCE desktop en die gedraagt zich inderdaad anders dan Gnome.
Mijn vermoeden is, dat het openen van een nieuwe terminal in xfce geen kindproces van die eerste terminal is, maar van de desktop zelf. Dan zou je geen variabelen in een terminal kunnen definiëren en die dan doorspelen aan een andere xfce4-terminal.
Je kunt het dan weer doen in ~/.bashrc als tenminste je hoofdshell inderdaad bash is. Vaak is dat dash en die negeert dat bestand. In dat geval kun je het ook doen in ~/.xinitrc.

Toch vind ik het vreemd dat export zich anders gedraagd in xfce dan in gnome, zou niet moeten naar mijn mening.

Een ander goed voorbeeld van export zou kunnen zijn ?
Ik praat niet te snel, je luisterd te langzaam ;-)

Re: environment variables worden niet gedefineerd
« Reactie #11 Gepost op: 2012/03/01, 16:10:49 »
licht dus aan de xfce4-terminal, deze maakt geen child process aan wanneer je een nieuwe terminal opend vanuit je huidige terminal.

xterm daarintegen doet het wel. Hier werkt de export ook gewoon.
Ik praat niet te snel, je luisterd te langzaam ;-)

Offline Bloom

  • Lid
Re: environment variables worden niet gedefineerd
« Reactie #12 Gepost op: 2012/03/01, 17:11:07 »
Toch vind ik het vreemd dat export zich anders gedraagd in xfce dan in gnome, zou niet moeten naar mijn mening.
Dat is in feite niet anders. Een export gaat alleen maar van een parent naar child-processen. En het probleem in XFCE is dat een proces gestart vanuit xfce4-terminal kennelijk geen kindproces van die terminal is maar van de desktop. En dan kun je alleen maar variabelen exporteren vanuit de desktop, dus met .bashrc of met .xinitrc.

Re: environment variables worden niet gedefineerd
« Reactie #13 Gepost op: 2012/03/01, 20:52:49 »
Toch vind ik het vreemd dat export zich anders gedraagd in xfce dan in gnome, zou niet moeten naar mijn mening.
Dat is in feite niet anders. Een export gaat alleen maar van een parent naar child-processen. En het probleem in XFCE is dat een proces gestart vanuit xfce4-terminal kennelijk geen kindproces van die terminal is maar van de desktop. En dan kun je alleen maar variabelen exporteren vanuit de desktop, dus met .bashrc of met .xinitrc.

.bashrc is ook een optie idd. Ging mij er meer om dat er dus terminals zijn die dus geen child processen aanmaken, ik dacht altijd dat dit wel zo was. Maar het is duidelijk zo :-)
Ik praat niet te snel, je luisterd te langzaam ;-)

Offline Bloom

  • Lid
Re: environment variables worden niet gedefineerd
« Reactie #14 Gepost op: 2012/03/01, 23:51:39 »
Xfce4-terminal maakt in elk geval geen kindprocessen aan zo te merken. Maar andere terminals (zoals Xterm en die van Gnome) dus duidelijk wel.

Re: environment variables worden niet gedefineerd
« Reactie #15 Gepost op: 2012/03/02, 14:45:49 »
Xfce4-terminal maakt in elk geval geen kindprocessen aan zo te merken. Maar andere terminals (zoals Xterm en die van Gnome) dus duidelijk wel.

lxterminal doet het op de zelfde manier als xfce4-terminal.

Terminal, gnome-terminal, xterm werken bij mij wel
Ik praat niet te snel, je luisterd te langzaam ;-)

Re: environment variables worden niet gedefineerd
« Reactie #16 Gepost op: 2012/03/02, 14:48:06 »
Voor wat het waard is: Konsole maakt ook kindprocessen aan (net eventjes getest).