2011-10-12 13 views

答えて

1

は、今私はSBCLを実行するために、rlwrapを使用してこの問題を解決

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

これは '(load ...)'を呼び出すときにsbclが参照するディレクトリを変更していないようです。 – daveloyall

+3

@daveloyall私は、観測は独自のトップレベルの質問に値すると思います。それは困惑している動作であり、私は答えを知らない。(私はちょうど完全なパス名を使ってそれを回避する)。 –

+0

あなたは '(load '(sb-posix: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))

関連する問題