De export opdracht is een in de bash shell ingebouwd commando, m.a.w. het maakt deel uit van uw shell (terminal). De export opdracht is door zijn duidelijke syntax (schrijfwijze) en drie opties eenvoudig te gebruiken. De export opdracht exporteert variabelen naar daarna opgestarte processen (opdrachten) waardoor dit achteraf gestarte proces deze variabelen ook kan gebruiken. Mocht het nog niet helemaal duidelijk zijn, dan wordt bij het verder lezen van deze tip alles duidelijk.
Bekijk het volgende voorbeeld:
dany@linux-55yl:~>pinda=pindanet.be
dany@linux-55yl:~>echo $pinda
pindanet.be dany@linux-55yl:~>bash
dany@linux-55yl:~>echo $pinda
dany@linux-55yl:~>exit
exitdany@linux-55yl:~>
Bovenstaande voorbeeld leert ons dat een nieuw kind proces dat door een ouder proces wordt opgestart de variabelen niet overerft. Daarvoor hebben we de export opdracht nodig. Het bovenstaande voorbeeld wordt dan:
dany@linux-55yl:~>pinda=pindanet.be
dany@linux-55yl:~>echo $pinda
pindanet.be dany@linux-55yl:~>export pinda
dany@linux-55yl:~>bash
dany@linux-55yl:~>echo $pinda
pindanet.be dany@linux-55yl:~>exit
exit dany@linux-55yl:~>
In de derde opdracht gebruiken we het export commando om de variabele pinda te exporteren. Daardoor blijft bij het starten van een nieuw kind proces de variabele pinda zijn inhoud behouden. Merk echter op dat enkel processen die gestart worden vanuit de terminal die de variabele geëxporteerd heeft, de variabele kan gebruiken. Het kind (child) proces erft dus de geëxporteerde variabelen van het ouder (parent) proces.
Elk proces is zowel kind als ouder. De enige uitzondering is het systemd proces, met PID (process ID) 1. Systemd is dus ouder van alle op uw Linux systeem draaiende processen.
dany@linux-55yl:~> ps -p 1
PID TTY TIME CMD
1 ? 00:00:00 systemd
Elk proces heeft dus een ouder die het proces heeft gestart en wordt zo het kind van het ouder proces.
dany@linux-55yl:~>echo $$
3704 dany@linux-55yl:~>bash
dany@linux-55yl:~>echo $$
4749 dany@linux-55yl:~>ps --ppid 3704
PID TTY TIME CMD 4749 pts/1 00:00:00 bash dany@linux-55yl:~>exit
exit
Bij het starten van een kind proces zorgen export commando's dat in het ouder proces geëxporteerde variabelen in het kind proces beschikbaar zijn.
Gebruik de export opdracht zonder opties of argumenten om een lijst van variabelen weer te geven die bij het starten van een nieuw proces geëxporteerd zullen worden. Hetzelfde resultaat bekom je met de -p optie.
dany@linux-55yl:~> export
declare -x ALSA_CONFIG_PATH="/etc/alsa-pulse.conf"
declare -x AUDIODRIVER="pulseaudio"
declare -x COLORFGBG="15;0"
declare -x COLORTERM="1"
Om een variabele te exporteren gebruiken we de naam van de variabele als argument voor de export opdracht.
dany@linux-55yl:~>MijnVariabele=10
dany@linux-55yl:~>export | grep MijnVariabele
dany@linux-55yl:~>export MijnVariabele
dany@linux-55yl:~>export | grep MijnVariabele
declare -x MijnVariabele="10"
Pas na het exporteren van de variabele MijnVariabele is deze variabele in de lijst met te exporteren variabelen opgenomen. Bovenstaande voorbeeld kan je inkorten door in de export opdracht de variabele te definiëren en een waarde te geven.
dany@linux-55yl:~>export MijnVariabele=10
dany@linux-55yl:~>export | grep MijnVariabele
declare -x MijnVariabele="10"
De meest gebruikte export opdracht is deze om de PATH shell variabele uit te breiden:
dany@linux-55yl:~> export PATH=$PATH:/usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/bin
Deze opdracht voegt de map /usr/lib64/jvm/java-1.7.0-openjdk-1.7.0/jre/bin toe aan de reeds bestaande PATH shell variabele.
Met de -f optie kan export ook functies exporteren. Onderstaande voorbeeld maakt een functie printname waarmee we met de echo opdracht pindanet.be op het scherm plaatsen.
dany@linux-55yl:~>printname () { echo "pindanet.be"; }
dany@linux-55yl:~>printname
pindanet.be dany@linux-55yl:~>export -f printname
dany@linux-55yl:~>bash
dany@linux-55yl:~>printname
pindanet.be dany@linux-55yl:~>exit
exit
Door de voorbeelden hierboven te volgen, heb je nu een variabele MijnVariabele in de export lijst staan.
dany@linux-55yl:~> export | grep MijnVariabele
declare -x MijnVariabele="10"
Om deze variabele van de export lijst te schrappen, gebruiken we de -n export optie.
dany@linux-55yl:~>export | grep MijnVariabele
declare -x MijnVariabele="10" dany@linux-55yl:~>export -n MijnVariabele
dany@linux-55yl:~>export | grep MijnVariabele
dany@linux-55yl:~>
Deze tip behandelde het basis gebruik van de export opdracht. Meer informatie kan je opvragen met de opdracht:
dany@linux-55yl:~> man export