如何从OS X上的shell脚本运行Clozure CL(Lisp)?
我试过如下:如何从OS X上的shell脚本运行Clozure CL(Lisp)?
$ cat args.sh
\#! /Applications/ccl/dx86cl64
(format t "~&~S~&" *args*)
$ ./args.sh
无法从./args.sh
加载LISP堆像我可以直接口齿不清运行良好:
$ /Applications/ccl/dx86cl64
Welcome to Clozure Common Lisp Version 1.5-r13651 (DarwinX8664)!
?
是否可以写一个shell脚本用Clozure CL运行lisp代码?我确信我正在做一些愚蠢的事情。
我从安装了它:http://openmcl.clozure.com/
只是追查查理马丁的答案和你后来的问题。 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 "'$1'") (ccl::quit))'
它放入一个文件,load-ccl-script.sh
(您选择的或其他名称)。然后下面的互动作品:
$ echo '(format t "weeee!")' > a.lisp
$ sh load-ccl-script.sh a.lisp
weeee!
$ _
你必须确保,内核可以加载一个Lisp内存映像。缺省行为是内核寻找一个文件,该文件的名称与添加了“.image”的内核二进制文件相同,即如果使用dx86cl64
启动CCL,则加载的映像为dx86cl64.image
。您可以通过使用--image
选项明确提供图像来修改此行为。尝试dx86cl64 --help
了解更多信息。
的问题是你的家当行:
\#! /Applications/ccl/dx86cl64
在UNIX文件中,前16位被称为“幻数”。碰巧可执行脚本的幻数与字符“#!”的位配置相同。文件的前16位具有与“\#”相同的配置,UNIX不会购买该文件。
可以添加幻数,但它不容易或便携,所以你需要的是一种调用脚本的方法。我建议
#! /bin/bash
exec /Applications/ccl/dx86cl64
与适当的参数等您的脚本。 (该exec
内置导致当前进程加载与命名可执行不分叉,所以你不要有一个备用过程撒谎。)
更新
你的具体情况,你会想要类似
@! /bin/bash
exec /Applications/ccl/dx86cl64 --eval '(format t "~&~S~&" *args*)'
感谢您的建议。我试过这个: #!/bin/bash exec/Applications/ccl/dx86cl64 --eval'(format t“hello script”)' 工作原理,只是在方法执行后我得到了lisp提示。我怎样才能退出循环? $ ./args.sh hello脚本 欢迎来到Clozure Common Lisp版本1.5-r13651(DarwinX8664)! ? – 2010-08-09 02:50:20
(再见)我相信。 – 2010-08-10 00:56:07
至少直到Clozure 1.4'(bye)'不可用。 '(ccl :: quit)',但是,(因此'(quit)'也可以工作,如果你在'ccl'包中)。 – Edgar 2010-08-10 17:14:45
请参阅ccl目录的脚本子目录。它应该有一些你可以调整和使用的脚本。
我做到了。不幸的是,它们不是lisp代码脚本,而是shell实用程序。 – 2010-08-09 02:53:22
不能从命令行调用此类脚本:
/Applications/ccl/dx86cl64 myscript
可以吗?
我认为你需要调用它像这样(我没有Clozure CL在这里,所以我不能测试):
/Applications/ccl/dx86cl64 -b -l myscript
所以,你的脚本应该这样开始:
#!/Applications/ccl/dx86cl64 -b -l
...
谢谢! (我猜'sh'在'sh load-ccl-script.sh a.lisp'中是多余的......) – 2010-08-10 11:21:44
是的,但没有它,我不得不包含'chmod + x load-ccl-script。 sh'行 - 3个字符更简洁一点,因为这不是该片段的目的,我去懒惰的方式:) – Edgar 2010-08-10 17:09:20