Ca marchait... avant - avec lualatex

Bonjour,

Je reprends un projet que j’ai laissé tomber il y a plus d’un an. Les
programmes ne tournent plus. Je ne vois qu’une seule chose de changée :
l’installation de texlive 2022. Mais il y a peut-être autre chose.

Voici, au travers d’un ECM un truc qui ne marche pas (et j’ai mis
beaucoup de temps à le situer) :

Exécuté par giac dans un shell avec la commande “giac ecm.txt” le script

===============
sortie:=fopen(“monfichier”);
fprint(sortie,Unquoted,“coucou”);
fclose(sortie);
return

crée bien le fichier monfichier contenant “coucou”.

Mais le source lualatex

==========================
\documentclass{article}
\begin{document}
\directlua{os.execute(“giac “..”'”..“ecm.txt”..“'”)} %% qui marchait
“avant” !
\directlua{os.execute(“giac ecm.txt”)} %% que j’ai
aussi essayé
\end{document}

Ne crée rien du tout !

Sauriez vous pourquoi… une question de syntaxe ?

Jean-Michel

Et avec lualatex --shell-escape ?
Il n’y a pas de message dans le log ?

Frédéric Boulanger
CentraleSupélec - Département Informatique Laboratoire Méthodes Formelles (LMF)
3 rue Joliot-Curie, 91192 Gif-sur-Yvette cedex Bât. 650 - 1 rue Raimond Castaing, 91190 Gif-sur-Yvette
+33 [0]1 69 85 14 84

On 11/02/2023 18:58, Jean-Michel Boucart wrote:

Bonjour,

Je reprends un projet que j’ai laissé tomber il y a plus d’un an. Les
programmes ne tournent plus. Je ne vois qu’une seule chose de changée
: l’installation de texlive 2022. Mais il y a peut-être autre chose.

Voici, au travers d’un ECM un truc qui ne marche pas (et j’ai mis
beaucoup de temps à le situer) :

Exécuté par giac dans un shell avec la commande “giac ecm.txt” le script

===============
sortie:=fopen(“monfichier”);
fprint(sortie,Unquoted,“coucou”);
fclose(sortie);
return

crée bien le fichier monfichier contenant “coucou”.

Mais le source lualatex

==========================
\documentclass{article}
\begin{document}
\directlua{os.execute(“giac “..”'”..“ecm.txt”..“'”)} %% qui marchait
“avant” !
\directlua{os.execute(“giac ecm.txt”)} %% que j’ai
aussi essayé
\end{document}

Ne crée rien du tout !

Sauriez vous pourquoi… une question de syntaxe ?

Jean-Michel

Le 11/02/2023 à 19:11, Frédéric Boulanger a écrit :

Et avec lualatex --shell-escape ?
Il n’y a pas de message dans le log ?

Frédéric Boulanger
CentraleSupélec - Département Informatique Laboratoire Méthodes
Formelles (LMF)
3 rue Joliot-Curie, 91192 Gif-sur-Yvette cedex Bât. 650 - 1 rue
Raimond Castaing, 91190 Gif-sur-Yvette
+33 [0]1 69 85 14 84

merci de ces suggestions.

Si je ne me trompe pas, lualatex permet justement d’exécuter, via lua,
des commandes sans que --shell-escape soit activé. Non ?

Par ailleurs le source ne produit pas de page donc il s’exécute sans
log, avec succès.

Jean-Michel

Le 11/02/2023 à 19:25, Jean-Michel Boucart a écrit :

Le 11/02/2023 à 19:11, Frédéric Boulanger a écrit :

Et avec lualatex --shell-escape ?
Il n’y a pas de message dans le log ?

Frédéric Boulanger
CentraleSupélec - Département Informatique Laboratoire Méthodes
Formelles (LMF)
3 rue Joliot-Curie, 91192 Gif-sur-Yvette cedex Bât. 650 - 1 rue
Raimond Castaing, 91190 Gif-sur-Yvette
+33 [0]1 69 85 14 84

En fait, vous avez raison : avec --shell-escape le fichier est créé.
Cela va à l’encontre de ce que j’avais compris de l’utilisation de
lualatex et il est vraisemblable que dans mon ancienne version, le
shell-escape était activé.

Je vais quand même essayer avec l’environnement luacode…

Jean-Michel

Le 11/02/2023 à 19:25, Jean-Michel Boucart a écrit :

Je vais quand même essayer avec l’environnement luacode…

L’essai est concluant : pas de fichier créé sans --shell-escape, même
avec l’environnement luacode :

====================
\documentclass{article}
\usepackage{luacode}

\begin{document}

\begin{luacode}
os.execute(“giac “..”'”..“ecm.txt”..“'”)
\end{luacode}

\end{document}

Il semble donc que la commande lua os.execute ne permet pas la création
d’un fichier via un programme «extérieur», lorsqu’elle est lancée par
lualatex, directement ou dans un environnement luacode, sans le
shell-escape. C’est bien dommage.

Est-ce que cela peut être confirmé ou contredit par un autre moyen
astucieux ?

Jean-Michel

Le 12 févr. 2023 à 12:44, Jean-Michel Boucart xyz@xyz.tld a écrit :

Le 11/02/2023 à 19:25, Jean-Michel Boucart a écrit :

Je vais quand même essayer avec l’environnement luacode…

L’essai est concluant : pas de fichier créé sans --shell-escape, même avec l’environnement luacode :

====================
\documentclass{article}
\usepackage{luacode}

\begin{document}

\begin{luacode}
os.execute(“giac “..”'”..“ecm.txt”..“'”)
\end{luacode}

\end{document}

Il semble donc que la commande lua os.execute ne permet pas la création d’un fichier via un programme «extérieur», lorsqu’elle est lancée par lualatex, directement ou dans un environnement luacode, sans le shell-escape. C’est bien dommage.

Le shell-escape est une sécurité qui évite que TeX puisse lancer un programme extérieur sans que vous en soyez averti. Dans la mesure où Lua est une partie intégrante de luatex, il n’y a pas de bonne raison pour que cela se passe autrement. Mais il est facile de configurer son installation pour que le Shell-escape soit appelée par défaut…

Est-ce que cela peut être confirmé ou contredit par un autre moyen astucieux ?

Jean-Michel


Michel Bovani
xyz@xyz.tld

Le 12/02/2023 à 12:51, Michel Bovani a écrit :

Le shell-escape est une sécurité qui évite que TeX puisse lancer un
programme extérieur sans que vous en soyez averti. Dans la mesure où
Lua est une partie intégrante de luatex, il n’y a pas de bonne raison
pour que cela se passe autrement. Mais il est facile de configurer son
installation pour que le Shell-escape soit appelée par défaut…

Certes, je comprends cela mais je constate un certain manque de
cohérence puisque je peux supprimer un fichier en lançant avec lualatex

===============

\begin{luacode}
os.remove(“monfichier”)
\end{luacode}

sans shell-escape !

Jean-Michel