web-dev-qa-db-fra.com

comment puis-je modifier le module de noyau binfmt_misc pour rendre les fichiers postscript exécutables?

Je commence tous mes scripts avec%! PS et je me demande ce que je peux faire pour rendre les scripts exécutables. Jusqu'ici, j'ai tout couru du terminal ghostscript. J'ai essayé de rendre les fichiers exécutables, mais il en résulte des erreurs équivalant à l'exécution du script ligne par ligne et à une interprétation incorrecte.

Heres une source simple:

%!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

et voici les erreurs qui suivent lorsque vous essayez de l’exécuter.

$ ./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'

comment puis-je rendre mon système de fichiers postscript exécutable? en utilisant Ubuntu Mate 18.04 ou version ultérieure.

EDIT essayant d'utiliser binfmt-misc ::

OK, je cherche donc à configurer binfmt-misc pour exécuter le postcript, mais je ne sais pas comment le configurer. Dans

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

le fichier d'état indique activé, et le fichier de registre est vide.

sur la page de wiki binfmt-misc, je vois quelques exemples, mais je vois aussi une référence à un "CODE DE TYPE" et je ne sais pas ce que cela signifie pour le post-scriptum.

J'ai essayé d'ajouter GS: M: MZ ::/home/utilisateur/bin/gs à enregistrer, via vim et echo, mais j'ai obtenu des erreurs de lecture et d'écriture même en tant que root. Désormais, l'autorisation est refusée lorsque j'essaie de modifier le fichier de registre. .

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

Admitadly, je n'ai aucune idée de ce que je fais.

J'ai également essayé de mettre un Shebang avec le chemin ghostscript à la première ligne de mon script, et qui revient avec ghostscript ayant une erreur irrécupérable, il charge une fenêtre qui se ferme immédiatement. Je ne sais pas quoi faire.

les sites Web que j'ai lus sont les suivants: https://elixir.bootlin.com/linux/v4.6/source/Documentation/binfmt_misc.txthttps: //en.wikipedia. org/wiki/Binfmt_misc

2
j0h

Adapter l'exemple de le post U & L lié fonctionne assez bien pour moi:

$ 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<<

Ouvre un fichier ps avec H@x0rz écrit dans diverses orientations.

2
muru

Voici un Horrible Hack (TM) qui résout votre problème initial sans binfmt. Je sais que cela ne répond pas exactement à la question posée, mais je me suis souvenu d'avoir piraté quelque chose de similaire pour les fichiers C dans ma jeunesse irresponsable, alors voilà.

Vous pouvez insérer le préfixe suivant dans votre fichier PS et le rendre exécutable:

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

Cela exécute l'intégralité du script via awk, supprime toutes les lignes commençant par '#!' (c'est-à-dire le premier), dirige le résultat dans un fichier tmp et l'exécute via ghostscript.

1
Florian Echtler