z_a*_*xis 9 clisp sbcl common-lisp
这是很容易改变CLISP的当前工作目录:
>cat ~/.clisprc.lisp
;;; The following lines added by ql:add-to-init-file:
#-quicklisp
(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname))))
(when (probe-file quicklisp-init)
(load quicklisp-init)))
(cd "/media/E/www/qachina/db/doc/money")
(load "money")
Run Code Online (Sandbox Code Playgroud)
但是,似乎cd在SBCL中没有类似的功能.如何用SBCL完成这项工作?
per*_*sid 12
CL-USER> (sb-posix:chdir "/home/apugachev")
0
CL-USER> (sb-posix:getcwd)
"/home/apugachev"
CL-USER> (sb-posix:chdir "/tmp/")
0
CL-USER> (sb-posix:getcwd)
"/tmp"
Run Code Online (Sandbox Code Playgroud)
小智 8
(setf *default-pathname-defaults* #P"/New/Absolute/Path/")
Run Code Online (Sandbox Code Playgroud)
小智 5
有同样的问题.结果
(setf *default-pathname-defaults* (truename "./subdir"))
Run Code Online (Sandbox Code Playgroud)
更改加载路径到subdir.如果你不想要相对路径,那么
(setf *default-pathname-defaults* (truename "/absolute/path"))
Run Code Online (Sandbox Code Playgroud)
现在,更好的答案是:使用(uiop:chdir "some/path").
或者您可以使用此功能临时更改目录:
(uiop:call-with-current-directory "some/path"
(lambda ()
(do-the-job))
或者这个宏更方便:
(uiop:with-current-directory ("some/path")
(do-the-job))
现在我使用 rlwrap 运行 SBCL 并解决了这个问题
$"cat ~/bin/sb"
breakchars="(){}[],^%$#@\"\";:''|\\"
cd /media/E/www/qachina/db/doc/money/
exec rlwrap --remember -c -b "$breakchars" -f "$HOME"/.sbcl_completions sbcl "$@"
Run Code Online (Sandbox Code Playgroud)
然后运行sb。