如何更改SBCL的当前目录?

时间:2011-10-12 05:31:35

标签: common-lisp sbcl clisp

非常很容易更改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完成?

5 个答案:

答案 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