Elisp:使用包含空格的路径调用start-process

时间:2012-03-23 14:42:31

标签: emacs elisp

我正在写一种称为劣质过程的模式。启动该过程的行是:

(setq grass-process (start-process "grass" "*grass*" "grass" "-text"
                           (concat  (file-name-as-directory 
                                    (cdr grass-location)) 
                           grass-mapset)))

grass-locationgrass-mapset都是包含toplevel目录和其中一个嵌套目录的路径的字符串,这些目录需要连接为set-process的参数。

grass-locationgrass-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?

1 个答案:

答案 0 :(得分:2)

[正如 @event_jr所建议,我在此重新发表评论作为答案,因为看起来这就是问题的根源]

您对start-process的调用似乎是正确的;你确定问题不是来自grass程序本身吗? (例如,第二个参数似乎与第一个参数连接;在此过程中可能会丢失空格...)