我正在写一种称为劣质过程的模式。启动该过程的行是:
(setq grass-process (start-process "grass" "*grass*" "grass" "-text"
(concat (file-name-as-directory
(cdr grass-location))
grass-mapset)))
grass-location
和grass-mapset
都是包含toplevel目录和其中一个嵌套目录的路径的字符串,这些目录需要连接为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?
答案 0 :(得分:2)
[正如 @event_jr所建议,我在此重新发表评论作为答案,因为看起来这就是问题的根源]
您对start-process
的调用似乎是正确的;你确定问题不是来自grass
程序本身吗? (例如,第二个参数似乎与第一个参数连接;在此过程中可能会丢失空格...)