Как запустить 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
...