我遇到GhostScript接受文件名的shell脚本变量的问题,如果这些文件名中有空格的话。
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\
(注意最后的反斜杠。)
我也得到:
Error: /undefinedfilename in (/Users/Ben/Desktop/qwe\\ qwe.pdf)
它在字面上正在逃避。我无法相信这样一个令人尊敬的软件有如此重大的失败,尽管其他人似乎遇到了同样的问题,没有任何重大的解决方案。我可以对我的剧本做些什么吗?
我在MacOS 10.11和12上。 哦,“没有空格”不是解决方案。 ; - )
更新:即使是最简单的例子也会显示错误:
> 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 :(得分:1)
认为我已经修好了。似乎GhostScript没有正确处理转义字符,从字面上解释它们。所以你(我)需要通过从文件路径中删除所有反斜杠来对输入进行处理。
filename=${filename//\\}
同样,非常奇怪的是,这样一个古老的软件应该有这样的错误。