首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(:chdir)和(负载)

(:chdir)和(负载)
EN

Stack Overflow用户
提问于 2015-09-18 20:56:42
回答 1查看 680关注 0票数 4

为什么sb-posix:chdir似乎没有改变(truename ".")(load ...)对cwd的看法?

代码语言:javascript
复制
CL-USER> (sb-posix:getcwd)
"directory-B"
CL-USER> (sb-posix:chdir "directory-A")
0
CL-USER> (sb-posix:getcwd)
"directory-A"
CL-USER> (truename ".")
#P"directory-B"
CL-USER> (sb-posix:chdir "/tmp")
0
CL-USER> (truename ".")
#P"directory-B"
CL-USER> (load "some-file-under-dirA.asd")
; Evaluation aborted on #<SB-INT:SIMPLE-FILE-ERROR "~@<Couldn't load ~S: file does not exist.~@:>" {CE86631}>.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-29 22:27:11

sb 存储库上有一个小广告。

代码语言:javascript
复制
A few functions in sb-posix don't correspond directly to their C
counterparts.

让我们来看看getcwd:

来自这里的C语言

函数将在buf指向的数组中放置当前工作目录的绝对路径名,并返回buf。复制到数组的路径名不应包含符号链接的组件。size参数是buf参数指向的字符数组的大小(以字节为单位)。如果buf是空指针,则不指定getcwd()的行为。

如果我们得到了这个函数的帮助,或者是从存储库中得到的:

“以字符串形式返回进程的当前工作目录。”

这里的问题是SBCL电流定向器被固定在特殊变量中:

代码语言:javascript
复制
*default-pathname-defaults*

这就是为什么当您调用truename和“。SBCL显示该变量中的当前目录,该目录不受真正改变shows环境或posix进程的调用shows:chdir的影响。如果您还想更改SBCL目录(在slime中您可以使用cd,然后键入新目录),您可以按下面的方式进行,但是要小心,因为您正在修改包含路径名的特殊变量,例如,它将不能很好地处理slime (我所显示的命令):

代码语言:javascript
复制
╭─anquegi@toshiba-debian  ~/learn/lisp/StackOverFlow/testDirs ‹ruby-2.2.1@laguna› 
╰─$ tree                                                                                                                                        148 ↵
.
├── dirA
└── dirB
    └── factorial.lisp

2 directories, 1 file

那就让我们去黏液吧

代码语言:javascript
复制
; SLIME 2015-06-01
CL-USER> (sb-posix:getcwd)
"/home/anquegi/learn/lisp/StackOverFlow/testDirs"
CL-USER> *default-pathname-defaults*
#P"/home/anquegi/learn/lisp/StackOverFlow/testDirs/"
CL-USER> (sb-posix:chdir "dirB")
0
CL-USER> (sb-posix:getcwd)
"/home/anquegi/learn/lisp/StackOverFlow/testDirs/dirB"
CL-USER> *default-pathname-defaults*
#P"/home/anquegi/learn/lisp/StackOverFlow/testDirs/"
CL-USER> (setf *default-pathname-defaults* (sb-ext:native-pathname (format nil "~A~A" (sb-posix:getcwd) "/"))) 
#P"/home/anquegi/learn/lisp/StackOverFlow/testDirs/dirB/"
CL-USER> (load "factorial")
T
CL-USER> (factorial 3)
6

请注意转换路径名中的字符串并添加"/",我不知道为什么SBCL采用这种工作方式。sb-posix与sbcl路径的分离

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32660907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档