Как я могу изменить модуль ядра 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'

Как я могу сделать мои файлы постскриптум системы исполняемыми. используя Ubuntu Mate 18.04 или более позднюю версию.

РЕДАКТИРОВАТЬ, пытаясь использовать binfmt-misc::

Хорошо, поэтому я смотрю на настройку binfmt-misc для выполнения postcript, но я не уверен, как его настроить. В

#/proc/sys/fs/binfmt_misc$ ls
register  status

файл состояния говорит, что включен, а файл реестра пуст.

на вики-странице binfmt-misc я вижу несколько примеров, но я также вижу ссылку на "TYPE CODE", и я не знаю, что это за postscript.

Я попытался добавить 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

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

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

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

2 ответа

Решение

Адаптация примера из связанного поста 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<<

Открывает файл PS с H@x0rz написано в разных направлениях.

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

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

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

Это запускает весь скрипт через awk, удаляет все строки, начинающиеся с '#!' (т.е. первый), передает результат в tmpfile и запускает его через ghostscript.

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