非常很容易更改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")
然而,似乎SBCL中没有cd
类似的功能。如何用SBCL完成?
答案 0 :(得分:11)
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"
答案 1 :(得分:7)
(setf *default-pathname-defaults* #P"/New/Absolute/Path/")
答案 2 :(得分:5)
有同样的问题。结果
(setf *default-pathname-defaults* (truename "./subdir"))
更改子目录的加载路径。如果你不想要相对路径,那么
(setf *default-pathname-defaults* (truename "/absolute/path"))
答案 3 :(得分:2)
现在,更好的答案是:使用(uiop:chdir "some/path")
。
或者您可以使用此功能暂时更改目录:
(uiop:call-with-current-directory "some/path"
(lambda ()
(do-the-job))
或者这个宏更方便:
(uiop:with-current-directory ("some/path")
(do-the-job))
答案 4 :(得分:1)
现在我使用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 "$@"
然后运行sb
。