Как изменить текущий каталог SBCL? - PullRequest
9 голосов
/ 12 октября 2011

очень легко изменить текущий рабочий каталог 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 ]

11 голосов
/ 07 октября 2013
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"
8 голосов
/ 11 июля 2016
(setf *default-pathname-defaults* #P"/New/Absolute/Path/")
5 голосов
/ 12 октября 2016

У меня был тот же вопрос.Оказывается,

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

изменяет путь загрузки на subdir.Если вы не хотите относительный путь, то

(setf *default-pathname-defaults* (truename "/absolute/path"))
3 голосов
/ 20 мая 2017

Прямо сейчас, лучший ответ: используйте (uiop:chdir "some/path").

Или вы можете использовать эту функцию для временного изменения каталога:

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

Или этот макросдля более удобного способа:

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

1 голос
/ 23 октября 2011

Теперь я использую 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.

...