Einführung

Teil 11

Von der Folge zum Ablauf: `.lil` Entscheidungen treffen lassen

Ein lineares Skript ist perfekt, solange die Antwort immer „A, dann B, dann C“ lautet. Sobald geprüft werden muss, ob ein Verzeichnis existiert, ein Pfad wiederverwendet, ein Ergebnis erfasst oder mit verständlichem Grund gestoppt werden soll, ist es ein Ablauf und keine Liste mehr.

Die kleinste Automatisierungssprache verwenden, die zur Aufgabe passt

Eine Datei mit #lil gehört zum linearen Core-Runner: normale Befehle laufen der Reihe nach, und diese Einfachheit ist ein Vorteil. Ideal für Setup-Listen, wiederholbare Diagnosen und kurze Abläufe.

run ist die nächste Ebene. Es ergänzt Variablen, Bedingungen, erfasste Ausgabe, verschachtelte Skripte und eine ausdrückliche Fehlerpolitik. Nicht jedes Drei-Zeilen-Rezept in ein Programm verwandeln; run nutzen, wenn der Ablauf wirklich Zustand oder Entscheidungen braucht.

install run
help run

Variablen machen aus kopierten Pfaden benannte Absichten

set root lil-playground gibt einem Pfad eine Rolle. Danach sagen $root, $source und $archive, was Werte bedeuten, statt denselben Literalwert an fünf Stellen zu ändern.

Gute Variablennamen machen ein Skript portabel. Umgebungsspezifische Werte nach oben, Geheimnisse heraus, und einige klare Variablen sind fast immer besser als clevere String-Konstruktionen.

Beginnen Sie die Datei damit
set root lil-playground
set source lil-playground/project
set archive lil-playground/project.zip

Eine Bedingung sollte eine Annahme schützen

if dir "$source" ist keine Dekoration: Die Prüfung verhindert, dass der Archivschritt still mit dem falschen Ziel arbeitet. Bedingungen sind besonders wertvoll bei Annahmen, deren Fehler sonst destruktiv oder verwirrend wird.

run unterstützt exists, file, dir, empty, eq, ne, ok, fail und command; not kehrt sie um. Verzweigungen so kurz halten, dass Leser weiterhin verstehen, warum jeder Pfad existiert.

Beginnen Sie die Datei damit
if dir "$source"
    stat "$source"
else
    stop "Project directory is missing"
end

Ausgabe nur erfassen, wenn die nächste Entscheidung davon abhängt

capture name <command> führt einen normalen lil-Befehl aus und speichert das Klartext-Ergebnis in einer Variablen. Built-ins wie $last, $status, $cwd und $line stellen typischen Ausführungszustand bereit.

Nicht alles capturen, nur weil es möglich ist. Terminaltext ist sinnvoll, wenn er klein und stabil ist; strukturierte Dateien oder dedizierte Formatbefehle sind besser, wenn Daten zwischen Werkzeugen oder über Zeit bestehen sollen.

Beginnen Sie die Datei damit
capture current pwd -s
if empty "$current"
    stop "Current directory is unavailable"
end

Vor der Automatisierung festlegen, was Fehler bedeuten

Standardmäßig stoppt run beim ersten Fehler: Ein fehlgeschlagener Befehl beendet den Ablauf. -k macht weiter und gehört nur in Aufgaben, deren unabhängige Schritte wirklich sicher fortgesetzt werden können. stop beendet den Ablauf mit einem für Menschen verständlichen Grund.

Unbekannte Abläufe zuerst mit -n prüfen. Der Prüflauf validiert und erweitert die Befehle, ohne sie auszuführen; -v zeigt bei einem echten Lauf anschließend die vollständige Ausgabe. Die Vorschau hält Automatisierung nachvollziehbar, bevor sie Änderungen vornimmt.

run workflow.lil -n
run workflow.lil -v

Große Abläufe nach Verantwortung teilen, nicht nach Zeilenzahl

Ein Ablauf kann run child.lil im selben Variablenkontext aufrufen. Routinen für Sicherung, Validierung oder Bereitstellung lassen sich dadurch trennen und wiederverwenden. Halten Sie die Verschachtelung flach und geben Sie jeder Datei genau eine Aufgabe.

run -p erzeugt eine komprimierte, per Prüfsumme geschützte Darstellung für den Transport. Packed .lil ist keine Verschlüsselung: Es schützt Format und Integrität vor versehentlichen Änderungen, nicht Vertraulichkeit oder Urheberschaft.

run -p workflow.lil workflow.packed.lil
run workflow.packed.lil

Automatisierung hat absichtlich weniger Rechte als ein interaktiver Mensch

Interaktive UI-Befehle sind in normalen Abläufen gesperrt; privilegierte nichtinteraktive Befehle wie php und ses brauchen ausdrücklich -x. Auch das interaktive Auto-Install mit @command ist in run-Skripten verboten.

Diese Reibung ist beabsichtigt. Ein reproduzierbarer Ablauf soll seine Modulabhängigkeiten vor der Ausführung deklarieren und nicht unerwartet Code installieren, nach Geheimnissen fragen oder das Terminal mitten im Lauf zerstören.

Als Skript aufbewahren

Speichern Sie dies als workflow.lil, legen Sie für den Erfolgsweg bei Bedarf lil-playground/project an und führen Sie zuerst run workflow.lil -n aus. Der entscheidende Übergang: Das Skript prüft seine Annahmen, bevor es das Archiv erstellt.

set root lil-playground
set source lil-playground/project
set archive lil-playground/project.zip

if not dir "$root"
    stop "lil-playground is missing"
end

if dir "$source"
    capture current pwd -s
    zip "$source" "$archive" -f
    stat "$archive"
else
    stop "Project directory is missing"
end