Umgebungsvariablen und mehr
« | 22 Feb 2019 | »Ein paar wichtige Informationen bekommt jeder genetisch mitvererbt,
wenn er das Licht der Welt erblickt.
Das ist bei Prozessen ganz ähnlich wie bei Menschen.
Die “Umgebung” (“Environment”) beinhaltet einige Datenwerte, die der Elternprozess seinen Kindern “aufdrücken” kann, und wenn er sich nicht weiter darum kümmert bekommen die Kinder das gleiche, was er selbst auf den Weg mitbekommen hat … die Umgebung wird also vererbt.
Es wäre schön, wenn es einen ausgeprägten Standard gäbe, was in “der Umgebung” alles gespeichert ist, doch bis auf wenige Details haben unterschiedliche Anwendungsgruppen auch unterschiedliche Umgebungsvariablen ausgeprägt.
Jedenfalls gibt es APIs um auf die eigene Umgebung zuzugreifen, und
Windows
vertraut dabei auf
GetEnvironmentVariable()
,
während Unices mit
getenv()
arbeiten.
Während Unix Systeme auf diese Umgebung “vertrauen”, stellt Windows für einige Felder eigene APIs bereit:
- Das “temporäre” Verzeichnis
Hier dürfen Programme Dateien ablegen, die nur kurzzeitig zur Datenauslagernung genutzt und dann gelöscht werden.- Unter Windows zeigt die Umgebungsvariable
TEMP
auf diese Verzeichnis. Doch zusätzlich gibt die APIGetTempPath()
ebenso dieses zurück. - Linux benennt diese Variable
TMPDIR
und die APItempnam()
kann benutzt werden um darin gleich eine neue Datei anzulegen.
- Unter Windows zeigt die Umgebungsvariable
- Das Benutzer-Verzeichnis, auch
HOME
Directory genannt Viele Daten des Benutzers und der von ihm gestarteten Programme liegen hier.- Unter Windows heißt die Variable
USERPROFILE
, doch der Wert kann auch von der Shell-APISHGetSpecialFolderPath()
mit dem WertCSIDL_PROFILE
ermittelt werden. - Linux bezeichnet sie einfach als
HOME
, zusätzlich können Dateien darin einfach adressiert werden, wenn der Pfad mit~/
beginnt.
- Unter Windows heißt die Variable
- Suchorte für nicht-absolute Pfade, auch als
PATH
bekannt Der PATH beinhaltet eine Liste von Verzeichnissen, in denen Dateien gesucht werden, wenn man sie nicht absolut adressiert und sie nicht im aktuellen Arbeitsverzeichnis liegen. Windows und Linux nutzen hier ausnahmsweise mal den gleichen BezeichnerPATH
, doch während die einzelnen Pfade unter Windows durch Strichpunkte;
getrennt sind, nutzt Linux Doppelpunkte:
.
Alle anderen mir bekannten Umgebungseinstellungen sind recht spezifisch an das jeweilige OS bzw. dessen Programme angepasst, von daher macht es wenig Sinn noch mehrere zu nennen.
Ein für meine Anwendungszwecke wichtiger Teil, fehlt allerdings:
In welches Verzeichnis, darf mein Programm Einstellung permanent ablegen?
Windows kennt hier den Standard, dass im USERPROFILE
einige
Unterverzeichnisse existieren, in welchen Programme wiederum ihre
eigenen Unterverzeichnisse anlegen dürfen um dort Daten abzulegen.
Damit ist vor allem das \AppData\Local
Verzeichnis gemeint, welches permanent
SHGetSpecialFolderPath()
mit CSIDL_LOCAL_APPDATA
zurückgeliefert wird.
Unter Linux kenne ich keine formale API, doch dafür den de-facto Standard
alles im HOME-Unterverzeichnis ~/.config
abzulegen. Programme erstellen
dort eindeutige Dateien oder Unterverzeichnisse für den Eigenbedarf.
X11 bzw.
freedesktop.org
erweitert dieses Konzept um weitere “sichtbare” Verzeichnisse für
Dokumente, Musik, Videos und die Desktopablage,
so wie wir es von SHGetSpecialFolderPath()
unter Windows bereits kennen.
Über die Konfigurationsdatei ~/.config/user-dirs.dirs
kann man diese
Standardwerte abändern.
Und am Ende landen die Verzeichnisse als Variablen im Environment.