Как запустить Clozure CL (Lisp) из сценария оболочки в OS X?

я попробовал следующий:

$ cat args.sh
#! /Applications/ccl/dx86cl64
(format t "~&~S~&" *args*)

$ ./args.sh 

не удалось загрузить изображение кучи lisp из ./args.sh

Я могу запустить lisp fine напрямую:

$ /Applications/ccl/dx86cl64
Welcome to Clozure Common Lisp Version 1.5-r13651  (DarwinX8664)!

? 

можно ли написать сценарий оболочки для запуска кода lisp с помощью Clozure CL? Я уверена, что делаю что-то глупое.

Я установил его из:http://openmcl.clozure.com/

5 ответов


просто следуя ответу Чарли Мартина и на ваш последующий вопрос. The dx86cl64 --eval <code> запустит REPL, поэтому, если вы хотите запустить данный скрипт, то закройте, просто добавьте это в конец своего скрипта:(ccl::quit). В приведенном вами примере это будет делать трюк:

#! /bin/bash 
exec /Applications/ccl/dx86cl64 --eval '(progn (format t "hello script") (ccl::quit))'

более приятный сценарий будет следующим:

#! /bin/bash
exec /Applications/ccl/dx86cl64 -b -e '(progn (load "''") (ccl::quit))'

вставить в файл load-ccl-script.sh (или другое имя по вашему выбору). Тогда работает следующее взаимодействие:

$ echo '(format t "weeee!")' > a.lisp
$ sh load-ccl-script.sh a.lisp
weeee!
$ _

проблема в вашей строке shebang:

\#! /Applications/ccl/dx86cl64

в файле UNIX первые 16 бит называются "магическим числом". Случается, что магическое число для исполняемого скрипта имеет ту же битовую конфигурацию, что и символы"#!". Первые 16 бит вашего файла имеют ту же конфигурацию, что и"\#", и UNIX не купит это.

можно добавлять магические числа, но это нелегко или портативно, поэтому вам нужен способ вызова скрипта. Я бы предложите

#! /bin/bash
exec /Applications/ccl/dx86cl64 

с соответствующими аргументами и т. д. Для вашего сценария. (The exec builtin заставляет текущий процесс загружаться с именованным исполняемым файлом без разветвления, так что у вас нет лишнего процесса, лежащего вокруг.)

обновление

в вашем конкретном случае вам понадобится что-то вроде

@! /bin/bash
exec /Applications/ccl/dx86cl64 --eval '(format t "~&~S~&" *args*)'

посмотреть args командной строки для Clozure почему.


вы должны убедиться, что ядро может загрузить образ памяти Lisp. Поведение по умолчанию заключается в том, что ядро ищет файл, который называется как двоичный файл ядра с ".изображение " добавлено, т. е. если вы начинаете CCL с помощью dx86cl64, тогда загруженное изображение dx86cl64.image из того же каталога. Вы можете изменить это поведение путем предоставления изображение можно также встраивать графику извне с помощью . Попробуй!--3--> для получения дополнительной информации.


см. подкаталог scripts вашего каталога ccl. В нем должны быть сценарии, которые можно адаптировать и использовать.


вы не можете вызвать такой скрипт из командной строки:

/Applications/ccl/dx86cl64 myscript

можно?

Я думаю, что вам нужно назвать это так (у меня здесь нет Clozure CL, поэтому я не могу проверить):

/Applications/ccl/dx86cl64 -b -l myscript

Итак, ваш скрипт должен начинаться так:

#!/Applications/ccl/dx86cl64 -b -l
...