使用 运行-program 时如何提供正确的路径
How to provide a correct path when using run-program
比如我有一堆这样的文件名:
[foo
我正在编写一些代码来收集它们并对其进行一些处理。
(setf a (car (uiop:directory-files "/path/to/dir")));;for simplicity
;;we suppose there is only a [foo at /path/to/dir
(uiop:run-program (list "cat" (namestring a)));; cat is just an example
然后它说:
Subprocess #<UIOP/LAUNCH-PROGRAM::PROCESS-INFO {1009C93CA3}>
with command ("cat" "/path/to/dir/\[foo")
exited with error code 1
虽然 (uiop:run-program (list "cat" "/path/to/dir/\[asd"))
看起来不错。
我也试过这样的:
(format NIL "~A" a)
(format NIL "~S" temp)
(princ-to-string temp)
那么如何调用 运行-具有正确路径名的程序?
SBCL 可读地打印 truename,并且 SBCL 允许在其路径名中使用方括号作为通配符,因此需要在打印表示中对它们进行转义。例如:
#P"d[0-9]"
有一个 pathname-name
即:
#<SB-IMPL::PATTERN "d" (:CHARACTER-SET . "0-9")>
当我测试您的示例并检查路径名时,我看到:
A pathname.
Namestring: "/tmp/\[a"
Host: #<SB-IMPL::UNIX-HOST {100010D983}>
Device: NIL
Directory: (:ABSOLUTE "tmp")
Name: "[a"
Type: NIL
Version: :NEWEST
Truename: #P"/tmp/\[a"
所以,组件没问题:路径名不包含括号,但路径名需要打印括号以便可读。
没有要求以直接作为本机文件名的方式打印路径名,但 SBCL 中有一个本机文件名接口,documented here。
或者,您可以致电 (uiop:unix-namestring file)
。
比如我有一堆这样的文件名:
[foo
我正在编写一些代码来收集它们并对其进行一些处理。
(setf a (car (uiop:directory-files "/path/to/dir")));;for simplicity
;;we suppose there is only a [foo at /path/to/dir
(uiop:run-program (list "cat" (namestring a)));; cat is just an example
然后它说:
Subprocess #<UIOP/LAUNCH-PROGRAM::PROCESS-INFO {1009C93CA3}>
with command ("cat" "/path/to/dir/\[foo")
exited with error code 1
虽然 (uiop:run-program (list "cat" "/path/to/dir/\[asd"))
看起来不错。
我也试过这样的:
(format NIL "~A" a)
(format NIL "~S" temp)
(princ-to-string temp)
那么如何调用 运行-具有正确路径名的程序?
SBCL 可读地打印 truename,并且 SBCL 允许在其路径名中使用方括号作为通配符,因此需要在打印表示中对它们进行转义。例如:
#P"d[0-9]"
有一个 pathname-name
即:
#<SB-IMPL::PATTERN "d" (:CHARACTER-SET . "0-9")>
当我测试您的示例并检查路径名时,我看到:
A pathname.
Namestring: "/tmp/\[a"
Host: #<SB-IMPL::UNIX-HOST {100010D983}>
Device: NIL
Directory: (:ABSOLUTE "tmp")
Name: "[a"
Type: NIL
Version: :NEWEST
Truename: #P"/tmp/\[a"
所以,组件没问题:路径名不包含括号,但路径名需要打印括号以便可读。
没有要求以直接作为本机文件名的方式打印路径名,但 SBCL 中有一个本机文件名接口,documented here。
或者,您可以致电 (uiop:unix-namestring file)
。