如何更改SBCL的当前目录?
这是非常容易改变CLISP的当前工作目录:如何更改SBCL的当前目录?
>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来完成?
现在我用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 "[email protected]"
然后运行sb
。
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"
这似乎并不改变sbcl在调用'(load ...)'时看起来的目录。 – daveloyall
@daveloyall我认为这个观察值得它自己的*问题。这是令人费解的行为,我也不知道答案(我只是通过全程使用完整路径来解决它)。 –
你可以做'(load(concatenate'string(sb-posix:getcwd)“/”“my-foo.lisp”))'。我知道,这很笨拙,但不那么脆弱。 –
(setf *default-pathname-defaults* #P"/New/Absolute/Path/")
有同样的问题。原来
(setf *default-pathname-defaults* (truename "./subdir"))
将负载路径更改为子目录。如果你不想相对路径,然后
(setf *default-pathname-defaults* (truename "/absolute/path"))
眼下,更好的答案是:用(uiop:chdir "some/path")
。
或者您可以使用此功能可临时更改目录:
(uiop:call-with-current-directory "some/path" (lambda() (do-the-job))
还是这个宏更方便的方法:
(uiop:with-current-directory ("some/path") (do-the-job))
它比使用CHDIR更简单? – peroksid