2011-10-12 15 views
6

यह बहुत है 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") 

हालांकि, ऐसा लगता है कि एसबीसीएल में कोई cd समान कार्य नहीं है। एसबीसीएल के साथ यह कैसे किया जा सकता है?

उत्तर

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 "[email protected]" 

हल करती है तो sb चलाते हैं।

+0

यह 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

यह उस निर्देशिका को बदलने जैसा प्रतीत नहीं होता है जब आप '(लोड ...)' कॉल करते समय sbcl दिखता है। – daveloyall

+3

@ डेवेलॉयल मुझे लगता है कि अवलोकन अपने स्वयं के शीर्ष-स्तर के प्रश्न के लायक है। यह परेशान व्यवहार है और मुझे जवाब नहीं पता, या तो (मैं बस हर समय पूर्ण पथ नामों का उपयोग करके इसके आसपास काम करता हूं)। –

+0

आप बस '(लोड (concatenate' स्ट्रिंग (एसबी-पॉजिक्स: getcwd) "/" "my-foo.lisp") कर सकते हैं)। बहुत बेकार, मुझे पता है, लेकिन थोड़ा कम भंगुर। –

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

एक ही सवाल था।

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

उपदिर के लिए लोड पथ बदलता है। आप रिश्तेदार पथ, तो

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

अभी नहीं करना चाहते हैं, बेहतर जवाब है: (uiop:chdir "some/path") का उपयोग करें।

या आप निर्देशिका अस्थायी रूप से परिवर्तित करने के लिए इस सुविधा का उपयोग कर सकते हैं:

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

या अधिक सुविधाजनक तरीका के लिए इस मैक्रो:

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

संबंधित मुद्दे