Hallo Liste, Zugegeben, ein wenig machen mir diese Environmentvariablen Kopfzerbrechen. Jetzt habe ich mir durch den Aufruf eines Mozilla-Skriptes meinen LD_LIBRARY_PATH verbogen. LD_LIBRARY_PATH=/opt/mozilla//:/opt/mozilla//components:/opt/kde/lib Das mit den // ist bestimmt falsch. Ich weiß natürlich, daß ich das auch wieder richtig schreiben kann (Stichwort: export). Ich würde mich aber bei solchen Sachen viel wohler fühlen, wenn ich wüßte, wo diese Variablen liegen. Gibt's keine Konfig-Datei dafür? Oder irgendwo Regeln, nach denen sie gesetzt werden? Kann mir da jemand mit einer grundsätzlichen Erklärung oder einem RTFM nachhelfen? (Im Bash-Manual habe ich ein bißchen gestöbert, ist mir aber gerade ein wenig zu unverdaulich). Danke, Helga
On Thu, 20 Sep 2001, Helga Fischer wrote:
LD_LIBRARY_PATH=/opt/mozilla//:/opt/mozilla//components:/opt/kde/lib
Das mit den // ist bestimmt falsch. Ich weiß natürlich, daß ich das auch wieder richtig schreiben kann (Stichwort: export).
dass muss gar nicht so falsch sein. probier mal cd /home//username/irgendwohin//
Ich würde mich aber bei solchen Sachen viel wohler fühlen, wenn ich wüßte, wo diese Variablen liegen. Gibt's keine Konfig-Datei dafür? Oder irgendwo Regeln, nach denen sie gesetzt werden?
/etc/profile hier werden einige der variable gesetzt - aber nicht alle. gruss Thilo
Hi Thilo, Am Donnerstag, 20. September 2001 20:25 schrieb Thilo:
On Thu, 20 Sep 2001, Helga Fischer wrote:
LD_LIBRARY_PATH=/opt/mozilla//:/opt/mozilla//components:/opt/kd e/lib
Das mit den // ist bestimmt falsch. Ich weiß natürlich, daß ich das auch wieder richtig schreiben kann (Stichwort: export).
dass muss gar nicht so falsch sein. probier mal
cd /home//username/irgendwohin//
Es stört die Shell nicht. OK.
Ich würde mich aber bei solchen Sachen viel wohler fühlen, wenn ich wüßte, wo diese Variablen liegen. Gibt's keine Konfig-Datei dafür? Oder irgendwo Regeln, nach denen sie gesetzt werden?
/etc/profile
hier werden einige der variable gesetzt - aber nicht alle.
Eben. Da pfriemle ich mir meine Variablen auch bewußt rein (oder in die .profile). Jetzt gibt es aber immer schlaue Programme, die irgendwo anders Variablen setzen (Mozilla oder andere Anwendungsprogramme); ich möchte das gerne irgendwie kontrollieren können. Man bekommt ja auch unterschiedliche Variablen angezeigt, je nachdem, was für einen Befehl man nimmt. env liefert ziemlich viel; da gab es aber auch noch einen anderen (ist mir entfallen), der förderte aber noch mehr davon zu Tage. Jetzt möchte ich es doch endlich mal ganz richtig und komplett verstehen. Helga
On Thu, 20 Sep 2001, Helga Fischer wrote:
Hi Thilo,
Am Donnerstag, 20. September 2001 20:25 schrieb Thilo:
On Thu, 20 Sep 2001, Helga Fischer wrote:
Ich würde mich aber bei solchen Sachen viel wohler fühlen, wenn ich wüßte, wo diese Variablen liegen. Gibt's keine Konfig-Datei dafür? Oder irgendwo Regeln, nach denen sie gesetzt werden?
/etc/profile
hier werden einige der variable gesetzt - aber nicht alle.
Eben. Da pfriemle ich mir meine Variablen auch bewußt rein (oder in die .profile). Jetzt gibt es aber immer schlaue Programme, die irgendwo anders Variablen setzen (Mozilla oder andere Anwendungsprogramme); ich möchte das gerne irgendwie kontrollieren können.
Man bekommt ja auch unterschiedliche Variablen angezeigt, je nachdem, was für einen Befehl man nimmt. env liefert ziemlich viel; da gab es aber auch noch einen anderen (ist mir entfallen), der förderte aber noch mehr davon zu Tage.
# env gibt dir immer die komplette env. es gibt nicht noch mehr :-)
Jetzt möchte ich es doch endlich mal ganz richtig und komplett verstehen.
deine umgebung aendert sich ja dauernd, deshalb sieht man manchmal mehr oder auch weniger - ja programme setzen auch umgebungsvariablen (z.b. der xserver die DISPLAY variable) alle programme uebernehmen (meistens) die umgebung von dem programm das sie aufruft (ab und zu sehr gefaehrlich, stichwort: root) dh. also jedes programm kann einfluss auf die umgebungsvariablen haben und es gibt keine centrale stelle die diese kontrolliert. /etc/profile ist deshalb ein guter anfang, da dort die erste umgebung geschaffen wird.
Helga
gruss Thilo
* Thilo schrieb am 20.Sep.2001:
On Thu, 20 Sep 2001, Helga Fischer wrote:
deine umgebung aendert sich ja dauernd, deshalb sieht man manchmal mehr oder auch weniger - ja programme setzen auch umgebungsvariablen (z.b. der xserver die DISPLAY variable) alle programme uebernehmen (meistens) die umgebung von dem programm das sie aufruft (ab und zu sehr gefaehrlich, stichwort: root)
Alle Programme übernehmen *immer* die gesammte Umgebeung. Das heißt alle Umgebungsvariablen. Das Programm kann sie natürlich später verändern, aber erst mal übernimmt es sie vom Elterprzeß. Ein Prozeß kann nicht die Umgebung anderer Prozesse verändern, sondern nur die eigene, die seine Kinder aber erben. Wenn z.B ein Prozeß eine Umgebungsvariable setzt, und dann ein fork macht, daß heißt eine identische Kopie seiner selbst, die einzige Möglichkeit ein Kindprozeß zu erzeugen, dann übernimmt dieser Kindprozeß diese, wie alle anderen Umgebungsvariablen vom Elterprozeß. Ändert der Elterprozeß später die Umgebungsvariable, so spührt das Kind nichts davon. Umgekehrt spürt der Elterprozeß auch nichts, wenn der Kindprozeß was an der Variablen ändert, oder eine neue anlegt. Bei der shell ist es so, daß eine normale shellvariable durch einen export zur Umgebungsvariablen wird. Das hat zur Folge, daß eine exportieret Variable vom Kind geerbt wird. Eine Variable die nicht exportiert wird, wird nicht vererbt. Das liegt aber daran, daß die shell im Gegensatz zu perl kein fork kennt. Ruft ein shellskript ein anderes auf, so wird die shell neu gestartet. Die Umgebung bleibt erhalten, nicht aber die normalen Variablen. Intern allerdings wird schon ein fork aufgerufen, der Kindprozeß ruft anschließend aber ein execve auf, der den gesamten Programmcode und auch Datencode des Prozesses überschreibt, außer die Daten, die sich im Kernel selber befinden, wie etwa die PID. Da gehören auch die Umgebungsvariablen dazu. Bernd -- Welches Buch ist zu empfehlen? Schon mal bei SuSE vorbeigesehen? http://www.suse.de/de/produkte/buecher/index.html oder die Empfehlungen der SuSE-Entwickler auf dem eigenen Rechner? file:///usr/shar/doc/sdb/de/html/literatur.html |Zufallssignatur 5
On 20-Sep-2001 Helga Fischer wrote:
Am Donnerstag, 20. September 2001 20:25 schrieb Thilo:
/etc/profile
hier werden einige der variable gesetzt - aber nicht alle.
Eben. Da pfriemle ich mir meine Variablen auch bewußt rein (oder in
Ist aber keine gute Idee. Inzwischen ueberschreibt yast zwar keine Konfigurationsdateien mehr, aber eigene Eintraege solltest du trotzdem besser in der /etc/profile.local vornehmen. Ansonsten hast du recht, es ist wirklich sehr unuebersichtlich, wo welche Variablen gesetzt werden. Ich habe mich da auch schon dumm und daemlich gesucht. Gruss, Heinz. -- E-Mail: Heinz W. Pahlke <h.pahlke@nexgo.de> This message was sent by means of XFMail via SuSE Linux
Helga Fischer wrote:
Am Donnerstag, 20. September 2001 20:25 schrieb Thilo:
cd /home//username/irgendwohin//
Es stört die Shell nicht. OK.
<haarspalt> Es stört den Kernel nicht. Damit kann es der Shell (und auch jedem anderen Programm) egal sein -- jedenfalls, solange sie Dateinamen nur benutzen und nicht miteinander vergleichen wollen ;-) </haarspalt>
/etc/profile
hier werden einige der variable gesetzt - aber nicht alle. [...] Man bekommt ja auch unterschiedliche Variablen angezeigt, je nachdem, was für einen Befehl man nimmt. env liefert ziemlich viel; da gab es aber auch noch einen anderen (ist mir entfallen), der förderte aber noch mehr davon zu Tage.
Das Kommando env zeigt alle Umgebungsvariablen an. Diese Umgebung ist keine Spezialität der Shell, sondern jeder Prozeß hat eine solche Umgebung. Aber das hat Bernd ja schon schön erklärt. Die Shell kennt darüber hinaus noch eigene Variablen, mit denen man dann aber nur innerhalb der einen Shell arbeiten kann und die nicht an Kindprozesse vererbt werden. Das können selbst definierte Variablen sein (vor allem in Shell-Skripten verwendet), und es gibt einige von der bash automatisch definierte Variablen. Schließlich sind in der Shell auch alle Umgebungsvariablen in der gleichen Weise wie Shell-Variablen ansprechbar. Das Kommando set gibt alle Shell-Variablen aus, was auch die Umgebungsvariablen einschließt. Eilert -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Eilert Brinkmann -- Universitaet Bremen -- FB 3, Informatik eilert@informatik.uni-bremen.de - eilert@tzi.org http://www.informatik.uni-bremen.de/~eilert/
Am Don, 20 Sep 2001, schrieb Helga Fischer:
Zugegeben, ein wenig machen mir diese Environmentvariablen Kopfzerbrechen. Jetzt habe ich mir durch den Aufruf eines Mozilla-Skriptes meinen LD_LIBRARY_PATH verbogen.
LD_LIBRARY_PATH=/opt/mozilla//:/opt/mozilla//components:/opt/kde/lib
Das mit den // ist bestimmt falsch. Ich weiß natürlich, daß ich das auch wieder richtig schreiben kann (Stichwort: export).
Nicht schön, aber auch nicht tragisch. // == / !
Ich würde mich aber bei solchen Sachen viel wohler fühlen, wenn ich wüßte, wo diese Variablen liegen. Gibt's keine Konfig-Datei dafür? Oder irgendwo Regeln, nach denen sie gesetzt werden?
Was heißt liegen? Das sind Shellvariablen, die für die Shells zu großen Teilen durch die /etc/profile, .profile, .bashrc festgelegt (modifiziert) werden. Des weiteren auch durch alle Dateien, die mit source (bzw . ) Dateiname eingelesen werden und die Variablen modifizieren. Das könnte ich mir vorstellen macht auch das Mozilla-Startskript und modifiziert dabei Deinen LD_LIBRARY_PATH (was aber nicht so tragisch ist, da es erstens die Funktionalität nicht schmälert (evtl. die Performance Deines Systems minimal) und sich nur auf die Shell auswirkt, aus der Du Mozilla gestartet hast (plus evtl. Kinder dieser Shell)
Kann mir da jemand mit einer grundsätzlichen Erklärung oder einem RTFM nachhelfen? (Im Bash-Manual habe ich ein bißchen gestöbert, ist mir aber gerade ein wenig zu unverdaulich).
Aber immer eine lohnende Lektüre, vielleicht nicht alles auf einmal, aber so jeden Abend als Betthupferl :) -- Christoph Maurer - Paul-Röntgen-Straße 7 - 52072 Aachen - Tux#194235 mailto:christoph-maurer@gmx.de - http://www.christophmaurer.de Auf der Homepage u.a.: Installation von SuSE 7.0 auf Notebook Acer Travelmate 508 T, Elektrotechnik an der RWTH Aachen
Christoph Maurer wrote: [Wo Shell-/Umgebungsvariablen gesetzt werden]
Des weiteren auch durch alle Dateien, die mit source (bzw . ) Dateiname eingelesen werden und die Variablen modifizieren.
Das könnte ich mir vorstellen macht auch das Mozilla-Startskript und modifiziert dabei Deinen LD_LIBRARY_PATH (was aber nicht so tragisch ist, da es erstens die Funktionalität nicht schmälert (evtl. die Performance Deines Systems minimal) und sich nur auf die Shell auswirkt, aus der Du Mozilla gestartet hast (plus evtl. Kinder dieser Shell)
Solange nicht das Mozilla-Startskript selbst mit source aufgerufen wird (und ich halte es für unwahrscheinlich, daß jemand das tut), kann das nicht passieren. Für gewöhnlich ruft man ein Startskript wie jedes andere Kommando auf, und dann wird es in einem eigenen Prozeß ausgeführt. Es kann dann zwar seine eigene Umgebung -- sei es direkt oder durch das Einlesen anderer Skripte mittels source -- verändern, hat aber schon keinen Einfluß mehr auf die Umgebung der aufrufenden Shell. Anders wäre das, wenn bei der Installation einer Software Änderungen an der Login-Konfiguration vorgenommen werden, etwa durch Ergänzungen in /etc/profile (böse!) oder /etc/profile.local (sollte man dem Admin überlassen) oder durch eine Datei in /etc/profile.d (noch die sauberste Lösung). In den meisten Fällen sollte es aber eine Lösung ohne Änderungen an dieser Stelle geben (z.B. mit einem Wrapper-Skript, das beim Aufruf nur für den jeweiligen Prozeß die nötige Umgebung herstellt). Eilert -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Eilert Brinkmann -- Universitaet Bremen -- FB 3, Informatik eilert@informatik.uni-bremen.de - eilert@tzi.org http://www.informatik.uni-bremen.de/~eilert/
participants (6)
-
B.Brodesser@t-online.de
-
Christoph Maurer
-
Eilert Brinkmann
-
Heinz W. Pahlke
-
Helga Fischer
-
Thilo