Attualmente ho un piccolo programma in Common Lisp, che voglio eseguire come script di shell. Sto usando il SBCL e perfettamente bene con questo quindi preferirò rimanere su questa piattaforma. :)Come utilizzare quicklisp quando il programma CL viene richiamato come script di shell?
Sono a conoscenza dell'opzione --script
e funziona perfettamente ad eccezione del modulo (ql:quickload)
.
Il mio programma utilizza lo CL-FAD, che viene caricato tramite ql:quickload
(penso che dovrei menzionare che si tratta della funzione di caricamento pacchetti da quicklisp). Quando script viene eseguito fino a valutare la forma
(ql:quickload :cl-fad)
, si rompe con l'errore successivo:
package "QL" not found
programma è confezionato nel singolo file sorgente, che ha seguente intestazione:
(defpackage :my-package
(:use :common-lisp)
(:export :my-main-method))
È un semplice eseguibile di automazione, quindi ho deciso (forse erroneamente) di non scrivere alcun sistema ASDF. Esporta la singola funzione che dovrebbe essere eseguita senza argomenti.
Per questo programma Attualmente sto cercando di scrivere la sceneggiatura launcher, e questo è quello che sto fissando:
#!/usr/bin/sbcl --script
(load "my-program.lisp")
(in-package :my-package)
(my-main-method)
Queste tre linee (senza contare la baracca) è quello che sto voglio automatizzare. Come ho letto nella documentazione, lo script con questo shebang può essere chiamato come semplice ./script.lisp
, e lo fa davvero ... con l'errore descritto in precedenza.
Cosa devo aggiungere nel launcher per :cl-fad
da caricare correttamente? La documentazione afferma che con l'opzione --script
SBCL non viene caricato un file di inizializzazione, quindi ho davvero bisogno di CopyPaste le linee
#-quicklisp
(let ((quicklisp-init (merge-pathnames "systems/quicklisp/setup.lisp"
(user-homedir-pathname))))
(when (probe-file quicklisp-init)
(load quicklisp-init)))
(che ql:add-to-init-file
aggiunge alla .sbclrc), per il mio script launcher? Forse ho qualche difetto architettonico profondo nella configurazione del mio programma?
E sì, quando inserisco le righe che tento di automatizzare in REPL nello stesso sbcl, il programma viene eseguito come previsto.
Ho quicklisp nella directory diversa e non voglio _yet_ per hackerare gli script di altri. :) Coredumping con il primo metodo ha funzionato benissimo, ho già molti launcher nel mio ~ ~/bin'. Anche l'immagine scaricata scorre incredibilmente veloce. %) – hijarian
Sì! Lavorare con le immagini è fantastico! Ecco perché Smalltalker inizia il suo lavoro quotidiano con un sorriso e gli sviluppatori di Java Eclipse iniziano il loro con il caffè. –