export-Frage

Post Reply
Message
Author
Stephan

export-Frage

#1 Post by Stephan »

Um die qt-Bibliothecken für meine Programmierprojekte (OS ist SuSeLinux8.1) nutzen zu können, muß ich ein paar Variablen setzen.
Also habe ich wie in der Installationsanweisung von qt gefordert, folgende exports der .profile-Datei meines home-Verzeichnisses hinzugefügt.
export QTDIR=/usr/lib/qt3
export PATH=§{QTDIR}/bin:§{PATH}
export LD_LIBRARY_PATH=§{QTDIR}/lib:${LD_LIBRARY_PATH}
export QMAKESPEC=§{QTDIR}/mkspecs/default

das Problem ist nun, das diese Variablen nach dem Aufruf der Datei trotzdem nicht zur Verfügung stehen, innerhalb der Datei kann ich den Wert mit Hilfe von echo abfragen und der gesetzte Wert wird korreckt zurückgeliefert, doch tue ich das selbe in der Shell (mit der ich auch .profile ausgeführt habe) dann sind die Variablen nicht besetzt.

Die Frage lautet allgemein vormuliert also:
Wo ist der richtige Ort für export-Anweisungen, damit die gewünschten Variablen dem System immer zur Verfügung stehen?

Jochen

Re: export-Frage

#2 Post by Jochen »

Du darfst das Skript nicht einfach aufrufen, sondern musst es sourcen:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">. qt-vars</font><hr></pre></blockquote>Man beachte den führenden "."! (Ich habe den Namen "qt-vars" für Dein Skript hier einfach mal angenommen.)

Grund: Mittels export machst Du aus einer einfachen Shell-Variablen eine Umgebungs- oder Environment-Variable. Das Environment ist Bestandteil eines Prozesses und wird weitervererbt, wenn ein neuer Prozess geforkt()t (also als Kopie des Elternprozesses erzeugt) wird. Damit hat der Kindprozess seine eigene Kopie. Änderungen daran beeinflussen den Elternprozess nicht; sobald Dein Skript abgelaufen ist und er ausführenden Prozess abgebaut wird, ist die Änderung im Enviroment ebenso futsch.

Wenn Du nun ein Skript mittels "." sourcest, wird kein Kindprozess gestartet, sondern die Shell, die gerade läuft, führt das Skript aus. Man kann es soch als ein "include" vorstellen. Als Konsequenz sollte in soclehn zu sourcenden Skripten auch niemals ein "exit" auftauchen <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">.

In der .profile kann man solche Skripte natürlich sourcen. Wenn man aber unter einer grafischen Benutzeroberfläche arbeitet, wird die .profile nicht ausgeführt, wenn man ein neues Konsolenfenster aufmacht. Daher ist es günstiger, solche Skripte aus der ~/.bashrc zu sourcen.

Jochen

Stephan

Re: export-Frage

#3 Post by Stephan »

ok, jetzt mal angenommen ich würde meine ganzen export-Anweisungen in eine Datei mit dem Namen ~/exports schreiben (die damit zum Shell-Skript wird?! ).
und würde jetzt in der boot.local die Zeile
. ~/exports
zufügen, dann müßten doch die Variablen systemweit gelten, oder?

Ich nehme mal an, das das Hinzufügen meiner export-Anweisungen zur .bashrc dazu führen würde, daß alle Shells die Variablen kennen (ein gutes Etappenziel), aber würde auch zum Beispiel kdevelop die qt-Biliotheck finden? Oder binden das die Bibliothecken mit einen eigenen Mechanismus ein?

Jochen

Re: export-Frage

#4 Post by Jochen »

> zufügen, dann müßten doch die Variablen systemweit gelten, oder?

Leider nein. init(8) startet zum Abarbeiten der rc-Skripte (und damit auch der boot.local) ja eine eigene Shell, die wiederum die ganzen Unterskripte aufruft. Sobald das Shellscript, das gestartet wird, um die boot.local auszuführen, sich beendet, ist wieder Essig.

> ... das das Hinzufügen meiner export-Anweisungen zur .bashrc dazu führen würde, daß alle Shells die Variablen kennen (ein gutes Etappenziel),

Korrekt.

> aber würde auch zum Beispiel kdevelop die qt-Biliotheck finden? Oder binden das die Bibliothecken mit einen eigenen Mechanismus ein?

Hmmm... <i>*knobel*</i> Keine Ahnung, wie kdevelop das Problem handhabt. Wenn das Programm auf die Umgebungsvariablen zurückgreift, könnte man Dein Programm in ~/.xsession sourcen. Gerade habe ich mir mal angeschaut, wie man das Problem unter RH8.0 lösen könnte: Dort würde man eine datei mit den entsprechenden export Anweisungen unterhalb von /etc/X11/xinit/xinitrc.d/ ablegen. Die werden im Startup-Vorgang dann gesourcet. Wie es bei SuSE8.1 aussieht, kann ich Dir leider nicht sagen.

Jochen

HJILUZGKJHG

Re: export-Frage

#5 Post by HJILUZGKJHG »

LALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALA
LALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALLALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALA
LALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALA
LALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALA
LALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALA
ALALALALALALALALALALALALALALALALALALALALALALALLALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALA
ALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALAL
LALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALLALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALAA
LALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALA
LALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALA
ALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALA












LALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALA
LALLALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALAALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALA
LLALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALAALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALA
LALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALA
LALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALA
LALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALA
LALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALALA

Post Reply