2011-10-12 12 views
6

Es muy fácil cambiar el directorio de trabajo actual de CLISP:¿Cómo cambiar el directorio actual de 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") 

Sin embargo, parece que no hay cd función similar en SBCL. ¿Cómo se puede hacer esto con SBCL?

Respuesta

1

Ahora uso rlwrap para funcionar SBCL y resuelve este problema

$"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]" 

continuación, ejecute sb.

+0

¿Es más simple que el uso de chdir? – peroksid

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" 
+4

Esto no parece cambiar el directorio en que sbcl se ve cuando se llama a '(cargar ...)'. – daveloyall

+3

@daveloyall Creo que la observación vale su propia pregunta de alto nivel. Es un comportamiento desconcertante y tampoco sé la respuesta (simplemente lo soluciono usando nombres de ruta completos todo el tiempo). –

+0

puedes hacer '(load (concatenar 'string (sb-posix: getcwd)"/"" my-foo.lisp "))'. Bastante torpe, lo sé, pero un poco menos frágil. –

5
(setf *default-pathname-defaults* #P"/New/Absolute/Path/") 
3

tenía la misma pregunta. Resulta

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

cambia la ruta de la carga a subdividir. Si no desea que la ruta relativa, a continuación,

(setf *default-pathname-defaults* (truename "/absolute/path")) 
1

En este momento, una mejor respuesta es: utilizar (uiop:chdir "some/path").

O puede usar esta función para cambiar el directorio temporal:

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

O esta macro de manera más conveniente:

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

Cuestiones relacionadas