Vorige: , Nach oben: Programmierschnittstelle   [Inhalt][Index]


9.14 Interaktiv mit Guix arbeiten

Mit dem Befehl guix repl finden Sie sich in einer netten und freundlichen REPL wieder (das steht für Read-Eval-Print Loop, deutsch Lese-Auswerten-Schreiben-Schleife) (siehe guix repl aufrufen). Wenn Sie mit Guix programmieren möchten – also eigene Pakete definieren, Manifeste schreiben, Dienste für Guix System oder Guix Home definieren und so –, dann wird Ihnen sicher gefallen, dass Sie Ihre Ideen auf der REPL ausprobieren können.

Wenn Sie Emacs benutzen, eignet sich dafür Geiser am meisten (siehe Perfekt eingerichtet), aber Emacs zu benutzen ist nicht unbedingt erforderlich, um Spaß an der REPL zu haben. Beim Verwenden von guix repl oder guile auf dem Terminal raten wir dazu, dass Sie Readline aktivieren, um Autovervollständigung zu genießen, und Colorized aktivieren für farbige Ausgaben. Führen Sie dazu dies aus:

guix install guile guile-readline guile-colorized

… und legen Sie dann eine Datei .guile in Ihrem Persönlichen Verzeichnis („Home“-Verzeichnis) an mit diesem Inhalt:

(use-modules (ice-9 readline) (ice-9 colorized))

(activate-readline)
(activate-colorized)

Auf der REPL können Sie Scheme-Code auswerten lassen. Sie tippen also einen Scheme-Ausdruck nach der Eingabeaufforderung und schon zeigt die REPL, zu was er ausgewertet wird:

$ guix repl
scheme@(guix-user)> (+ 2 3)
$1 = 5
scheme@(guix-user)> (string-append "a" "b")
$2 = "ab"

Interessant wird es, wenn Sie auf der REPL anfangen, mit Guix herumzubasteln. Dazu „importieren“ Sie zunächst das Modul (guix), damit Sie Zugriff auf den Hauptteil der Programmierschnittstelle haben, und vielleicht wollen Sie auch noch andere nützliche Guix-Module importieren. Sie könnten (use-modules (guix)) eintippen, denn es ist gültiger Scheme-Code zum Importieren eines Moduls (siehe Using Guile Modules in Referenzhandbuch zu GNU Guile), aber auf der REPL können Sie den Befehl use als Kurzschreibweise einsetzen (siehe REPL Commands in Referenzhandbuch zu GNU Guile):

scheme@(guix-user)> ,use (guix)
scheme@(guix-user)> ,use (gnu packages base)

Beachten Sie, dass am Anfang jedes REPL-Befehls ein führendes Komma stehen muss. Der Grund ist, dass ein REPL-Befehl wie use eben kein gültiger Scheme-Code ist; er wird von der REPL gesondert interpretiert.

Durch Guix wird die Guile-REPL um zusätzliche Befehle erweitert, die dort praktisch sind. Einer davon, der Befehl build, ist hier nützlich: Mit ihm wird sichergestellt, dass das angegebene dateiartige Objekt erstellt wurde; wenn nicht, wird es erstellt. In jedem Fall wird der Dateiname jeder Ausgabe der Erstellung zurückgeliefert. Im folgenden Beispiel erstellen wir die Pakete coreutils und grep sowie eine als computed-file angegebene Datei (siehe computed-file), um sogleich mit der Prozedur scandir aufzulisten, was für Dateien in Grep im Verzeichnis /bin enthalten sind:

scheme@(guix-user)> ,build coreutils
$1 = "/gnu/store/…-coreutils-8.32-debug"
$2 = "/gnu/store/…-coreutils-8.32"
scheme@(guix-user)> ,build grep
$3 = "/gnu/store/…-grep-3.6"
scheme@(guix-user)> ,build (computed-file "x" #~(mkdir #$output))
/gnu/store/…-x.drv wird erstellt …
$4 = "/gnu/store/…-x"
scheme@(guix-user)> ,use(ice-9 ftw)
scheme@(guix-user)> (scandir (string-append $3 "/bin"))
$5 = ("." ".." "egrep" "fgrep" "grep")

Will man die einzelnen Schritte von Guix nachvollziehen, eignet sich der Befehl lower: Er nimmt ein dateiartiges Objekt, um es zu einer Ableitung oder einem Store-Objekt „herunterzubrechen“ (siehe Ableitungen):

scheme@(guix-user)> ,lower grep
$6 = #<derivation /gnu/store/…-grep-3.6.drv => /gnu/store/…-grep-3.6 7f0e639115f0>
scheme@(guix-user)> ,lower (plain-file "x" "Hallo!")
$7 = "/gnu/store/…-x"

Die vollständige Liste der REPL-Befehle bekommen Sie zu sehen, wenn Sie ,help guix eingeben. Hier eine Referenz:

REPL-Befehl: build Objekt

Das Objekt herunterbrechen und erstellen, wenn es noch nicht erstellt ist. Als Ergebnis zurückgeliefert wird der Dateiname jeder Ausgabe.

REPL-Befehl: lower Objekt

Das Objekt zu einer Ausgabe oder einem Dateinamen im Store herunterbrechen und diesen zurückliefern.

REPL-Befehl: verbosity Stufe

Legt Stufe als die Ausführlichkeitsstufe für Erstellungen fest.

Das ist das Gleiche wie die Befehlszeilenoption --verbosity (siehe Gemeinsame Erstellungsoptionen): Stufe 0 zeigt gar nichts an, Stufe 1 nur Ereignisse bei der Erstellung und auf höheren Stufen bekommen Sie Erstellungsprotokolle angezeigt.

REPL-Befehl: run-in-store Ausdruck

Den Ausdruck, einen monadischen Ausdruck, durch die Store-Monade laufen lassen. Siehe Die Store-Monade für mehr Erklärungen.

REPL-Befehl: enter-store-monad

Damit betreten Sie eine neue REPL, die monadische Ausdrücke auswerten kann (siehe Die Store-Monade). Sie können diese „innere“ REPL verlassen, indem Sie ,q eintippen.


Vorige: guix repl aufrufen, Nach oben: Programmierschnittstelle   [Inhalt][Index]