Как я могу изменить модуль ядра binfmt_misc, чтобы сделать файлы Postscript исполняемыми?

Я начинаю все свои сценарии с%! 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 Я вижу несколько примеров, но я также вижу ссылку на «КОД ТИПА», и я не знаю, что это за постскриптум.

Я пытался добавить GS: M: MZ :: / home / user / bin / gs для регистрации через vim и echo, но у меня были ошибки чтения и записи даже в качестве пользователя root, и теперь я получаю отказано в разрешении, когда я попробуйте отредактировать файл реестра.

 root@xy:/proc/sys/fs/binfmt_misc# echo 'GS:M:MZ::/home/user/bin/gs'  > register  
-bash: echo: write error: Invalid argument

По общему признанию, я понятия не имею, что я делаю.

Я также попытался поместить шебанг с путём ghostscript в первую строку моего скрипта, и это возвращается с ghostscript с неисправимой ошибкой, он загружает окно, которое немедленно закрывается. Я не уверен, что делать.

веб-сайты, которые я читал: https://elixir.bootlin.com/linux/v4.6/source/Documentation/binfmt_misc.txt https: // en.wikipedia.org/wiki/Binfmt_misc

2
задан 10 November 2018 в 23:07

2 ответа

Адаптируя пример из , связанный пост U & amp; 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<<

Открывает файл ps с H@x0rz, написанным в различных ориентациях. ]

2
ответ дан 10 November 2018 в 23:07

Вот Horrible Hack (TM) , который решает вашу исходную проблему без binfmt. Я знаю, что это не совсем ответ на отредактированный вопрос, но я вспомнил, что в моей безответственной юности я взломал что-то похожее на файлы C, так что вот так.

Вы можете добавить следующий префикс в свой PS-файл и сделать его исполняемым:

#!/usr/bin/awk !/^#!/ { print >> ".tmp.ps" } END { system("/usr/bin/ghostscript .tmp.ps ; rm .tmp.ps ") }

При этом весь скрипт запускается через awk, удаляются все строки, начинающиеся с «#!» (то есть первый), передает результат в tmp-файл и запускает его через ghostscript.

1
ответ дан 10 November 2018 в 23:07

Другие вопросы по тегам:

Похожие вопросы: