Am Dienstag, 24. Februar 2004 14:32 schrieb Matthias Dort:
On Tue, 24 Feb 2004, Thilo Gramlich wrote:
Am Dienstag, 24. Februar 2004 10:36 schrieb Matthias Dort:
[Schnipp]
Mein urspruengliches Ziel ist aber, eine Variable in der Shell-Umgebung auch dem cron-Prozess bekannt zu machen.
Frage: braucht cron diese Variable, um zu laufen? Ich behaupte mal, nein. Also sollte cron diese Variable auch nicht kennen.
Nein. cron daemon braucht diese Variable nicht und lehnt hartnaeckig ab, diese von Shell zu übernehmen.
Nochmal! Es _gibt_ keine allgemein gültigen Shell-Variablen! Es gitb auch nicht "die Shell-Umgebung"! _Jede_ Shell kennt exakt nur die Variablen, die für sie gesetzt wurden. Das Bekanntmachen kann entweder über das Sourcen einschlägiger Konfigurationsdateien (z. B. /etc/profile oder ~./bashrc, ...) oder direkt in der gestarteten Shell über ein VAR=WERT (bzw. ein export VAR=WERT, wenn die Variable auch in Subshells der aktuellen Shell gelten soll). Wenn die Shell (der laufende Prozess) beendet wird, ist auch ihre Umgebung weg - es sei denn, der Prozess schreibt seine Umgebung (z. B. per env) in eine Datei, um sie beim nächsten Start wieder einlesen zu können (eher unüblich). Wenn Du also innerhalb eines crontab-Jobs eine Variable brauchst, dann musst Du sie setzen - und das geht genauso wie in Login-Shells oder Shellscripts. Der Unterschied zu Login- und interaktiven Shells ist der, dass crontab beim Start eine andere Umgebung (z. B. keine /etc/profile oder ~/.profile) einliest und deshalb eine andere - meist sehr eingeschränkte - Umgebung zur Verfügung hat. Versuche Dir bitte zu merken: Eine Umgebung gilt prinzipiell für einen laufenden Prozess. Es gibt keine "Shell-" oder "Linux-" Umgebung. Jeder Prozess liest seine ihn interessierende Konfiguration ein, dafür haben die meisten bestimmte Defaults (z. B. die Login-Shell), wenn Du selbst ein Script schreibst, musst Du auch selbst dafür sorgen, dass es die benötigte Konfiguration kriegt. Wenn Du das Script nur von einer interaktiven Shell aus startest, dann kannst Du (mit Einschränkungen) von bestimmten gesetzten Umgebungsvariablen ausgehen (die die Shell, von der aus Du Dein Script startest gesetzt und exportiert hat), wenn Du es im cron einsetzen willst, dann kannst Du das nicht. [...]
Ja. Aber cron übernimmt nicht eine ihm unbekannte Shell-Variable. Die Variable, die cron nicht kennt, muss explizit neu gesetzt werden, entweder im Skript, das cron ausführt, oder in der crontab, oder in einer Datei <file> in Verbindung mit `source <file>`. Allerdings wenn man eine Variable in dieser Weise explizit setzt, ist sie eine völlig neue Variable und hat leider nicht mehr mit der Shell-Variable zu tun!
s. o. - es gibt _keinen_ Prozess, der ihm unbekannte Variablen nutzen kann - er muss sie setzen oder der ihn aufrufende Prozess muss sie setzen und exportieren.
EXPORT VAR=VALUE export?
Das hängt wahrscheinlich von der im Script genutzten Shell ab - IIRC unterstützt die Bourne-Shell dieses Konstrukt nicht, dann muss man explizit VAR=VALUE; export VAR benutzen.
Dann gibt es wahrscheinlich nur eine Lösung, dass ich die Variablen-Zuweisung immer wieder per Hand ändere.
NEIN! Thilo hat Dir doch geschrieben, wie Du das machen kannst: Source die einschlägigen Konfigdateien, in denen die Variable gesetzt wird, oder bau Dir ne eigene Datei. Jan