我最近一直在玩Quicklisp,并且在使用Shebang脚本时遇到了一些小问题。
设置
我做了以下工作:
curl https://beta.quicklisp.org/quicklisp.lisp -o /tmp/quicklisp.lisp下载的quicklisp(quicklisp-quickstart:install)一起安装,同时在环境中加载/tmp/quicklisp。(ql:add-to-init-file)将Quicklisp添加到init文件问题
对于需要Quicklisp (特别是ASDF)的脚本,我可以使用sbcl --load ~/quicklisp/setup.lisp --script start.lisp运行它。但是,当我使用Shebang /usr/bin/env sbcl --script作为独立脚本运行它时,它会失败,因为它不能找到类似UIOP之类的东西,除非我将下面两行放在脚本本身中:
(load "~/quicklisp/setup.lisp")
(ql:quickload "asdf")PS:任何指针都会非常有用。
PPS:,我相信这对我来说是个愚蠢的错误,原谅我。
发布于 2022-06-21 19:02:46
在这种情况下,你需要:
(require :asdf)我不知道为什么。--script等于--no-sysinit --no-userinit --disable-debugger --end-toplevel-options,所以我们忽略了很多。(因此加载Quicklisp的setup.lisp似乎也是必需的,因为它不会被您的.sbclrc加载,这就是Quicklisp添加这个小片段的地方)
这是我在其他环境(例如CI )中需要的设置。
发布于 2022-06-21 03:48:28
我将使用roswell --它使使用Common代码的独立脚本可用。
我描述了设置roswell 这里。这太容易了。我描述了在系统范围内安装roswell,或者如何在ubuntu、mac和windows中本地安装roswell。
或者你也可以直接在roswell的站点上查找。
使用roswell的优点是可以使用任何roswell-可安装的Common实现,如下所示:
Candidates impls for installation are:
abcl-bin
allegro
ccl-bin
clasp-bin
clasp
clisp
cmu-bin
ecl
mkcl
sbcl-bin
sbcl
sbcl-source不仅仅是sbcl。
roswell允许在用Common编写时直接从shell调用脚本。
从罗斯韦尔$ ros ...命令内部,可以获得quicklisp。所以$ ros install xxx通常使用quicklisp来安装xxx。
使用roswell,您可以通过一个命令(包括脚本)从bash调用任何Common程序,这些命令都是用通用lisp编写的。
请看这里:https://roswell.github.io/Roswell-as-a-Scripting-Environment.html
https://stackoverflow.com/questions/72693701
复制相似问题