我在 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\
(注意最后的反斜杠。)
我也得到:
错误:/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)
最佳答案
我想我已经修好了。似乎 GhostScript 没有正确处理转义字符,而是按字面解释它们。因此,您(我)需要通过从文件路径中删除所有反斜杠来清理输入。
filename=${filename//\\}
再一次,非常奇怪,这么古老的软件竟然有这样的错误。
关于shell - GhostScript 和文件名中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42578061/