Wie führe ich Clozure CL (Lisp) von einem Shell-Skript unter OS X aus?

8

Ich habe Folgendes versucht:

%Vor%

Das Lisp-Heap-Image konnte nicht von ./args.sh

geladen werden

Ich kann Lispeln direkt ausführen:

%Vor%

Ist es möglich, ein Shell-Skript zu schreiben, um Lisp-Code mit Clozure CL auszuführen? Ich bin mir sicher, dass ich etwas Dummes mache.

Ich habe es installiert von: Ссылка

    
M-V 08.08.2010, 15:57
quelle

5 Antworten

6

Folgen Sie einfach Charlie Martins Antwort und Ihrer anschließenden Frage. Das dx86cl64 --eval <code> startet eine REPL. Wenn Sie also ein bestimmtes Skript starten wollen, dann beenden Sie es, fügen Sie es einfach an das Ende Ihres Skripts: (ccl::quit) . In dem von Ihnen bereitgestellten Beispiel würde dies den Trick bewirken:

%Vor%

Ein schöneres Skript wäre das folgende:

%Vor%

Setze das in eine Datei, load-ccl-script.sh (oder einen anderen Namen deiner Wahl). Dann funktioniert die folgende Interaktion:

%Vor%     
Edgar 10.08.2010, 00:33
quelle
2

Das Problem liegt in Ihrer Shebang-Zeile:

%Vor%

In einer UNIX-Datei werden die ersten 16 Bits als "magische Zahl" bezeichnet. Es kommt vor, dass die magische Zahl für ein ausführbares Skript dieselbe Bitkonfiguration wie die Zeichen "#!" Ist. Die ersten 16 Bits Ihrer Datei haben die gleiche Konfiguration wie "\ #", und UNIX wird das nicht kaufen.

Es ist möglich, magische Zahlen hinzuzufügen, aber es ist nicht einfach oder portabel, also brauchen Sie eine Möglichkeit, das Skript aufzurufen. Ich würde vorschlagen,

%Vor%

mit geeigneten Argumenten usw. für Ihr Skript. (Der exec builtin bewirkt, dass der aktuelle Prozess mit der benannten ausführbaren Datei ohne Forking geladen wird, sodass Sie nicht über einen Ersatzprozess verfügen müssen.)

Aktualisieren

In Ihrem speziellen Fall wollen Sie etwas wie

%Vor%

Siehe Befehlszeilenargumente für Clozure für warum.

    
Charlie Martin 08.08.2010 16:52
quelle
0

Sie müssen sicherstellen, dass der Kernel ein Lisp Memory Image laden kann. Das Standardverhalten ist, dass der Kernel nach einer Datei sucht, die wie die Kernel-Binärdatei mit angehängtem ".image" benannt ist, dh wenn Sie CCL mit dx86cl64 starten, dann ist das geladene Bild dx86cl64.image aus demselben Verzeichnis . Sie können dieses Verhalten ändern, indem Sie das Bild explizit mit der Option --image angeben. Probieren Sie dx86cl64 --help für weitere Informationen.

    
Dirk 08.08.2010 16:11
quelle
0

Sehen Sie sich das Skript-Unterverzeichnis Ihres ccl-Verzeichnisses an. Es sollte einige Skripte haben, die Sie anpassen und verwenden können.

    
Rainer Joswig 08.08.2010 17:33
quelle
0

Sie können das Skript nicht über die Befehlszeile wie folgt aufrufen:

%Vor%

können Sie?

Ich denke, dass du es so nennen musst (ich habe hier keinen Clozure CL, also kann ich nicht testen):

%Vor%

Also sollte Ihr Skript wie folgt beginnen:

%Vor%     
Svante 08.08.2010 21:54
quelle

Tags und Links