The book is currently only available in German.
Standard-Bibliothek — `umgebung`
Verfügbar — implementiert in Phase B.7.2. Vollständige Spec in
docs/umgebung.md.
Jedes Skript läuft in einer Umgebung: Umgebungsvariablen, Kommandozeilen-Argumente, ein aktuelles Verzeichnis, ein Betriebssystem, ein Benutzer. umgebung macht das alles abrufbar.
24.1 Aktivieren und System-Info
nutze umgebung
sag umgebung.betriebssystem() // "windows", "linux", "darwin"
sag umgebung.architektur() // "amd64", "arm64"
sag umgebung.benutzer() // "sascha", "rust", ...
sag umgebung.benutzer_ordner() // "/home/sascha" oder "C:\Users\sascha"
24.2 Umgebungsvariablen
// Lesen mit Default
nimm shell = umgebung.wert_oder("SHELL", "/bin/sh")
// Lesen mit nichts-Fallback (für „existiert die Variable überhaupt?")
nimm api_key = umgebung.wert("API_KEY")
wenn api_key == nichts {
sag "API_KEY nicht gesetzt, breche ab."
umgebung.beende(1)
}
// Setzen / Entfernen (mutiert nur diesen Prozess + Kinder)
umgebung.setze("MEIN_FLAG", "ja")
umgebung.entferne("ALTE_VAR")
// Alle als Karte
nimm alle = umgebung.alle()
sag "Anzahl Variablen: {länge(schluessel(alle))}"
Wichtig: umgebung.setze und umgebung.entferne mutieren nur den eigenen Prozess (und Kind-Prozesse, wenn prozess-Modul später kommt). Keine Persistenz, keine System-weite Wirkung.
24.3 Kommandozeilen-Argumente
kiste run skript.ki --modus schnell datei.csv
nutze umgebung
nimm args = umgebung.argumente()
sag args // ["--modus", "schnell", "datei.csv"]
Was zählt als Arg? Alles nach dem Skript-Pfad. Kiste-eigene Flags (--emit-vars etc., vor dem Skript-Pfad) werden vom CLI verbraucht und tauchen nicht auf.
Es gibt heute kein integriertes Args-Parsing für Flags wie --modus=schnell. Das Skript verarbeitet die Liste selbst.
24.4 Working Directory
sag umgebung.arbeitsverzeichnis() // z.B. "/home/sascha/projekt"
umgebung.wechsle_in("/tmp")
sag umgebung.arbeitsverzeichnis() // "/tmp"
// Alle relativen Pfade in datei.* / pfad.* werden ab hier relativ zu /tmp aufgelöst
programm_ordner() — Dateien neben der Exe finden. Ein installiertes Programm kennt
sein Working Directory nicht (der Nutzer startet es über eine Verknüpfung, aus irgendeinem
Ordner). Wer mitgelieferte Dateien laden will — Icons, Beispiel-Bilder, Saatgut-Daten —
fragt nicht das Working Directory, sondern den Ordner der Exe:
// findet die Icons, egal von wo gestartet wurde
nimm icon = pfad.verbunden(umgebung.programm_ordner(), "icons/stift.svg")
Merksatz: programm_ordner() zum LESEN mitgelieferter Dateien, benutzer_ordner()
zum SCHREIBEN von Nutzerdaten (der Exe-Ordner ist unter C:\Programme gesperrt). Im
nativen Build ist es der Ordner der App-Exe; bei kiste run der von kiste.exe.
24.5 Process beenden
wenn nicht datei.existiert("./config.json") {
sag "Fehler: config.json fehlt."
umgebung.beende(1)
}
// Wenn die Bedingung wahr war, kommen wir hier nicht hin.
umgebung.beende(0) = Erfolg, alles andere = Fehler nach Unix-Konvention. Kehrt nie zurück, kein Cleanup, kein versuche/fange.
24.6 Standard-Pattern: Skript mit Argumenten
nutze umgebung
nutze datei
nimm args = umgebung.argumente()
wenn länge(args) == 0 {
sag "Verwendung: kiste run lese_datei.ki <pfad>"
umgebung.beende(1)
}
nimm pfad = args[0]
wenn nicht datei.existiert(pfad) {
sag "Datei nicht gefunden: {pfad}"
umgebung.beende(2)
}
sag datei.inhalt(pfad)
24.7 Was nicht in umgebung ist
- Andere Programme starten — kommt mit
prozess-Modul. - Process-IDs / Signal-Handling — kommt mit
prozess. - Args-Parsing (
--key=value-Auflösung) — kommt vielleicht mitargs-Modul, falls Bedarf.