【发布时间】:2012-03-23 14:42:30
【问题描述】:
我正在编写一个调用低级进程的模式。启动该过程的行是:
(setq grass-process (start-process "grass" "*grass*" "grass" "-text"
(concat (file-name-as-directory
(cdr grass-location))
grass-mapset)))
grass-location 和grass-mapset 都是分别包含顶级目录和嵌套目录之一的路径的字符串,它们需要连接为set-process 的参数。
当grass-location 和grass-mapset 包含没有空格的普通目录时,这可以正常工作。但是,如果目录名称中有空格,则在传递给start-process 时会被删除,从而产生以下错误:
grass-location
=> ("geobase Canada" . "/home/tws/grassdata/geobase Canada")
grass-mapset
=> "PERMANENT"
;; Calling start-process as above, the following error is produced
;; in the *grass* buffer:
Cleaning up temporary files ...
Starting GRASS ...
/home/tws/grassdata/geobaseCanada/PERMANENT: Not a valid GRASS location
Process grass exited abnormally with code 1
请注意,geobase Canada 已简化为 geobaseCanada。我已经尝试在concat 表达式中添加引号来保护该字符串,但它会产生更奇怪的错误,主目录被添加到参数前面。
如何将带有空格的路径名传递给启动进程?
【问题讨论】:
-
您确定错误来自您的
start-process表达式,而不是来自grass程序本身吗? (例如,第二个参数似乎连接到第一个参数;可能在此过程中丢失了空格...) -
你说得对,我从 xterm 启动草时遇到了同样的错误。谢谢!
-
@Francesco 你能把这个作为一个真正的答案,这样这个问题就不会被过滤为未回答吗?