我以 %!PS 开始所有脚本,我想知道如何才能使脚本系统可执行。到目前为止,我一直在 ghostscript 终端运行所有内容。我尝试使文件可执行,但结果却是错误,脚本逐行运行,并被错误解释。
这是一个简单的来源:
%!PS
/Times findfont 72 scalefont setfont
306 396 translate % move center to here
4{
2 2 moveto
90 rotate
(H@x0rz) true charpath stroke
}repeat
showpage
以下是尝试运行它时出现的错误。
$ ./rotate.ps
./rotate.ps: line 1: fg: no job control
./rotate.ps: line 2: /Times: No such file or directory
./rotate.ps: line 3: 306: command not found
./rotate.ps: line 5: 4{: command not found
./rotate.ps: line 6: 2: command not found
./rotate.ps: line 7: 90: command not found
./rotate.ps: line 8: syntax error near unexpected token `true'
./rotate.ps: line 8: ` (H@x0rz) true charpath stroke'
如何使我的 postscript 文件系统可执行。使用 Ubuntu Mate 18.04 或更高版本。
编辑尝试使用 binfmt-misc::
好的,我正在考虑设置 binfmt-misc 来执行后记,但我不确定如何设置。在
#/proc/sys/fs/binfmt_misc$ ls
register status
状态文件显示已启用,但寄存器文件为空白。
在 binfmt-misc wiki 页面上,我看到了一些示例,但我也看到了对“TYPE CODE”的引用,但我不知道那是什么后记。
我尝试通过 vim 和 echo 将 GS:M:MZ::/home/user/bin/gs 添加到寄存器,但即使以 root 身份也出现了读写错误,现在当我尝试编辑寄存器文件时,权限被拒绝。
root@xy:/proc/sys/fs/binfmt_misc# echo 'GS:M:MZ::/home/user/bin/gs' > register
-bash: echo: write error: Invalid argument
不可否认,我不知道自己在做什么。
我还尝试在脚本的第一行放置一个带有 ghostscript 路径的 shebang,结果 ghostscript 出现了不可恢复的错误,它会加载一个窗口并立即关闭。我不知道该怎么办。
我一直在阅读的网站是: https://elixir.bootlin.com/linux/v4.6/source/Documentation/binfmt_misc.txt https://en.wikipedia.org/wiki/Binfmt_misc
答案1
改编自链接的 U&L 帖子对我来说已经足够好了:
$ echo ':postscript:M::%!PS::/usr/bin/gs:' | sudo tee /proc/sys/fs/binfmt_misc/register
:postscript:M::%!PS::/usr/bin/gs:
$ cat > foo.ps
%!PS
/Times findfont 72 scalefont setfont
306 396 translate % move center to here
4{
2 2 moveto
90 rotate
(H@x0rz) true charpath stroke
}repeat
showpage
$ chmod +x foo.ps
$ ./foo.ps
GPL Ghostscript 9.25 (2018-09-13)
Copyright (C) 2018 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Querying operating system for font files...
Can't find (or can't open) font file /usr/share/ghostscript/9.25/Resource/Font/Times.
Can't find (or can't open) font file Times.
Didn't find this font on the system!
Substituting font Times-Roman for Times.
Loading NimbusRoman-Regular font from /usr/share/ghostscript/9.25/Resource/Font/NimbusRoman-Regular... 4646060 3103684 11124488 9679005 1 done.
>>showpage, press <return> to continue<<
打开一个以H@x0rz
各种方向书写的 ps 文件。
答案2
这是一个可怕的黑客(TM)这解决了您原来的问题,无需 binfmt。我知道这并没有准确回答编辑的问题,但我记得在我年轻时曾为 C 文件做过类似的事情,所以就在这里。
您可以将以下前缀放入 PS 文件中并使其可执行:
#!/usr/bin/awk !/^#!/ { print >> ".tmp.ps" } END { system("/usr/bin/ghostscript .tmp.ps ; rm .tmp.ps ") }
这将通过 awk 运行整个脚本,删除所有以“#!”开头的行(即第一行),将结果导入临时文件,然后通过 ghostscript 运行该文件。