2017-03-03 26 views
1

我遇到GhostScript接受shell脚本变量文件名的问题,如果这些文件名中有空格。GhostScript和空格的文件名

gs -dPDFX -dNOPAUSE -dBATCH -dNOOUTERSAVE -sDEVICE=pdfwrite -sOutputFile="${filename}" -sColorConversionStrategy=CMYK -dProcessColorModel=/DeviceCMYK -dCompatibilityLevel=1.4 "${f}" /usr/local/share/ghostscript/9.20/lib/PDFX_def.ps 

如果文件名中有空格,则GS说: “没有这样的文件”,给名称为:(注意最后的反斜线)

path/to/file/partial\ 

我m也得到: Error: /undefinedfilename in (/Users/Ben/Desktop/qwe\\ qwe.pdf)

它从字面上进行转义。我无法相信这样一款令人尊敬的软件有这么大的失败,尽管其他人似乎也遇到了同样的问题,没有任何重大的解决方案。有什么我可以做我的脚本?

我在MacOS 10.11和12. 哦,“没有空格”不是解决方案。 ;-)

UPDATE:即使是很简单的例子显示了错误:

> f="/Users/Ben/Desktop/qwe\ qwe.pdf" 
> gs "$f" 
GPL Ghostscript 9.20 (2016-09-26) 
Copyright (C) 2016 Artifex Software, Inc. All rights reserved. 
This software comes with NO WARRANTY: see the file PUBLIC for details. 
Error: /undefinedfilename in (/Users/Ben/Desktop/qwe\\ qwe.pdf) 
+0

你需要在文件名中加上“”,我怀疑你的shell脚本剥离了它们。从命令行尝试它。 – KenS

+0

这是不是我已经做了? – benwiggy

+0

看来,GhostScript不喜欢转义反斜杠。如果我删除反斜杠,留下“未转义”的空间,那么它就会起作用。我如何告诉bash不要将转义字符放入我的文件字符串中? – benwiggy

回答

1

想我已经固定它。看来GhostScript不能正确处理转义字符,从字面上解释它们。所以你(我)需要通过删除文件路径中的所有反斜杠来对输入进行santize。

filename=${filename//\\} 

再次,非常奇怪,这样一个古老的软件应该有这样的错误。