Kiste
EN

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 mit args-Modul, falls Bedarf.