12

更改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 如何做到这一点?

4

5 回答 5

15
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"
于 2013-10-07T08:55:06.643 回答
12
(setf *default-pathname-defaults* #P"/New/Absolute/Path/")
于 2016-07-11T19:10:31.483 回答
7

有同样的问题。原来

(setf *default-pathname-defaults* (truename "./subdir"))

将加载路径更改为子目录。如果你不想要相对路径,那么

(setf *default-pathname-defaults* (truename "/absolute/path"))
于 2016-10-12T00:40:30.003 回答
6

现在,更好的答案是:使用(uiop:chdir "some/path").

或者您可以使用此功能临时更改目录:

(uiop:call-with-current-directory "some/path" (lambda () (do-the-job))

或者这个宏以获得更方便的方式:

(uiop:with-current-directory ("some/path") (do-the-job))

于 2017-05-20T14:47:36.930 回答
0

现在我使用 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

于 2011-10-23T03:35:31.930 回答