Путь-каталог ведет себя странно
Я использую SBCL 1.1.4, и обнаружил, что pathname-directory ведет себя странно:
Скажем, что есть путь, содержащий "..", следующие примеры являются тривальными. SBCL преобразует каждое ".." в ":UP"
(pathname-directory "a/b/../")
(:RELATIVE "a" "b" :UP)
(pathname-directory "a/../b/../")
(:RELATIVE "a" :UP "b" :UP)
Проблема приходит здесь:
(pathname-directory "C:/test/../")
;;=> (:ABSOLUTE "test" :UP)
(truename "C:/test/..")
#P"C:/test/../"
(pathname-directory (truename "C:/test/.."))
;;=> (:ABSOLUTE "test" "..")
(pathname-directory #P"C:/test/../")
;;=> (:ABSOLUTE "test" :UP)
При вызове pathname-directory для возвращаемого значения truename, ".." не преобразуется в ":UP". (Имя "C:/test/..") также возвращает #P"C:/test/../", так почему же ".." не преобразуется?
1 ответ
Это похоже на проблему с SBCL в Windows. Truename of /a/b/..
должно быть /a/
, Вместо этого, кажется, возвращается ссылка на ..
сама запись.
В Linux это то, что вы получаете:
(truename "/etc/udev/..")
#P"/etc/"
Я бы сообщил об этом как об ошибке разработчикам SBCL.