2013-05-20 22 views
3

我希望能够在我的home目录在任何操作系统上的操作系统例如翻译某个目录的实际绝对路径(make-pathname :directory '(:absolute :home "directoryiwant")应翻译为“/家庭/ weirdusername/directoryiwant”一类UNIX系统的系统。如何翻译(补充路径:目录“(:绝对:首页‘directoryiwant’)转换成绝对路径

什么会选择这样做的作用?作为

(directory-namestring 
     (make-pathname :directory '(:absolute :home "directoryiwant")) 
> "~/" 

实际上并没有做这笔交易。

回答

6

如果你需要的东西相对于您的家庭直ORY,在Common Lisp的功能user-homedir-pathnamemerge-pathnames可以帮助您:

CL-USER> (merge-pathnames 
      (make-pathname 
      :directory '(:relative "directoryyouwant")) 
      (user-homedir-pathname)) 
#P"/home/username/directoryyouwant/" 

namestring functions(例如,namestring目录namestring)如预期在这个路径工作:

CL-USER> (directory-namestring 
      (merge-pathnames 
      (make-pathname 
      :directory '(:relative "directoryyouwant")) 
      (user-homedir-pathname))) 
"/home/username/directoryyouwant/" 
1
CL-USER > (make-pathname :directory (append (pathname-directory 
               (user-homedir-pathname)) 
              (list "directoryiwant")) 
         :defaults (user-homedir-pathname)) 

#P"/Users/joswig/directoryiwant/" 

NAMESTRING返回作为一个字符串的函数。

CL-USER > (namestring #P"/Users/joswig/directoryiwant/") 
"/Users/joswig/directoryiwant/"