On Fri, Jan 11, 2002 at 07:24:38PM +0100, Eric Schaefer wrote:
Nach dem Fork haben beide das selbe Datensegment, also auch gleiche Umgebung (bis copy-on-write, dann sinds nicht mehr die selben Datensegment, aber fast die gleichen Inhalte).
Aber ich würde mal unterstellen, daß nach einem anschließenden exec() (für das stty), dann nur noch die exportierten Variablen (eben die Umgebung) da sind.
Man möge mich berichtigen. Ich bin weder Informatiker noch habe ich das alles eben nochmal verifiziert, es ist nur Glauben und Halbwissen ;-)
In der Shell gebe ich ein: "mutt", die Shell macht ein fork() und im Enkelprozess wird ein exec("mutt") gemacht.
Mutt wertet $EDITOR aus. Wenn ich nun selbiges lösche und (bash) nur per "EDITOR=emacs" die Variable wieder setze ist die doch NICHT exportiert, oder? Aufruf von mutt und schreiben einer Mail ergibt: emacs wird
export EDITOR=emacs EDITOR= export
.. Du wirst sehen, die Variable ist immer noch exportiert. Wie also "löschst" Du die Variable? "unset" löscht wirklich die Variable.
gestartet (ansonsten mit gelöschter EDITOR Variable: "vi". Alles andere wäre ja auch Quark. Das exportieren ist doch IMHO nur dafür da, daßdiese Variablen vom kind an den Parent zurückgegeben werden
Nein, vom Kind wird generell außer dem exit-Wert nichts an den Parent zurückgegeben. (Prozess-Sicherheit)
(sonst könnte man in Skripen wie .bashrc auch keine Variablen sinnvoll setzen...)
.bashrc wird in der laufenden Umgebung ausgeführt:
source .bashrc oder . .bashrc
Heiko