GhostScript 和文件名中的空格
GhostScript and spaces in filenames
我在 GhostScript 接受文件名的 shell 脚本变量时遇到问题,如果这些文件名中包含 space。
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
如果文件名有 space,那么 GS 会说 "no such file",给出名称为:
path/to/file/partial\
(注意最后的反斜杠。)
我还得到:
Error: /undefinedfilename in (/Users/Ben/Desktop/qwe\ qwe.pdf)
字面意思是逃跑。我不敢相信这样一个受人尊敬的软件有如此重大的失败,尽管其他人似乎也有同样的问题,但没有任何重要的解决方案。我可以对我的脚本做些什么吗?
我使用的是 MacOS 10.11 和 12。
哦,"don't have spaces" 不是解决方案。 ;-)
更新:即使是最简单的示例也会显示错误:
> 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//\}
再说一次,这么古老的软件竟然有这样的bug,真是太奇怪了。
我在 GhostScript 接受文件名的 shell 脚本变量时遇到问题,如果这些文件名中包含 space。
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
如果文件名有 space,那么 GS 会说 "no such file",给出名称为:
path/to/file/partial\
(注意最后的反斜杠。)
我还得到:
Error: /undefinedfilename in (/Users/Ben/Desktop/qwe\ qwe.pdf)
字面意思是逃跑。我不敢相信这样一个受人尊敬的软件有如此重大的失败,尽管其他人似乎也有同样的问题,但没有任何重要的解决方案。我可以对我的脚本做些什么吗?
我使用的是 MacOS 10.11 和 12。 哦,"don't have spaces" 不是解决方案。 ;-)
更新:即使是最简单的示例也会显示错误:
> 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//\}
再说一次,这么古老的软件竟然有这样的bug,真是太奇怪了。