1 votes

"do shell script" échoue avec une plainte concernant "env" et "No such file or directory" mais le chemin de la commande est correct.

Contexte : texdoc est une commande installée par la distribution LaTeX MacTeX et which texdoc dans le terminal donne "/Library/TeX/texbin/texdoc".

Dans le terminal, texdoc --version donne :

Texdoc 3.4.1 (2022-03-19) .

Mais dans AppleScript, via do shell script mais cela n'a pas fonctionné.

do shell script "/Library/TeX/texbin/texdoc --version" donne l'erreur :

erreur "env : texlua : No such file or directory" numéro 127.

Je ne comprends pas pourquoi AppleScript parle de "texlua" introuvable et de "env" (soit dit en passant which texlua donne "/Library/TeX/texbin/texlua").

Comment appeler texdoc con do shell script ?

Editer

En fait, non seulement je ne peux pas appeler directement texdoc --version mais une fois ce problème résolu par l'appendice /Library/TeX/texbin: au chemin, un cas d'utilisation réel ne fonctionne toujours pas, par exemple do shell script "texdoc url" même si j'ajoute /Library/TeX/texbin: au chemin. Applescript se plaint de ne pas trouver le fichier open commande ( open est appelé par texdoc pour afficher la documentation pdf. C'est très étrange, car lorsqu'on l'appelle directement, par exemple do shell script "open /usr/local/texlive/2022/texmf-dist/doc/latex/url/url.pdf" , cela fonctionne.

Ainsi, après avoir ajouté export PATH='/Library/TeX/texbin:$PATH'; , le code AppleScript :

do shell script "export PATH='/Library/TeX/texbin:$PATH'; texdoc url"

produit cette erreur :

erreur "sh : open : commande non trouvée \rtexdoc erreur : Échec de l'exécution : open "/usr/local/texlive/2022/texmf-dist/doc/latex/url/url.pdf"" numéro 1

Quelle est donc la méthode complète pour appeler un binaire comme texdoc avec AppleScript ?

2 votes

Pour information, le shell utilisé ici a un environnement différent de celui du Terminal. Essayez de lancer env dans le terminal et l'exécuter dans l'éditeur script avec do shell script "env" . Notez en particulier la différence de PATH. Essayez ensuite do shell script "which tex" et comparer. Pour plus d'explications de la part d'Apple, jetez un coup d'œil à leur note technique sur le sujet : TN2065 . Vous pouvez faire la plupart des choses, vous devez juste en tenir compte.

2 votes

/Library/TeX/texbin/texdoc est probablement un script shell qui dépend d'autres script/programmes dans /Library/TeX/texbin. Ce répertoire se trouve dans votre PATH dans un shell interactif, mais pas dans le shell que l'on utilise. do shell script crée. Essayer do shell script "PATH="/Library/TeX/texbin:$PATH"; texdoc --version"

0 votes

@Mockman Parmi les différences, dans le terminal, env sorties PATH=/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/‌​bin:/usr/sbin:/sbin:‌​/Library/TeX/texbin:‌​/Library/Apple/usr/b‌​in et par AppleScript, j'obtiens seulement PATH=/usr/bin:/bin:/usr/sbin:/sbin . Pour qui tex J'obtiens /Library/TeX/texbin/tex dans le terminal et l'erreur "The command exited with a non-zero status." number 1 dans AppleScript. Mais pourquoi ma commande ne fonctionne-t-elle pas lorsque j'ajoute le chemin complet à la commande CLI ?

3voto

nohillside Points 82672

La toute première ligne de /Library/TeX/texbin/texdoc

$ head -1 /Library/TeX/texbin/texdoc
#!/usr/bin/env texlua

appels texlua et s'appuie sur env trouver le commandement à l'intérieur de soi PATH . Comme les AppleScripts s'exécutent avec le chemin d'accès par défaut (qui ne contient pas de /Library/TeX/texbin ), cela échouera avec l'erreur que vous voyez.

Pour résoudre le problème, utilisez

do shell script "PATH=/Library/TeX/texbin:$PATH texdoc --version"

au lieu de cela, ce qui permet de s'assurer que PATH inclut votre répertoire texbin.

1 votes

Applescript ne comprend pas les guillemets simples ; vous devez utiliser des guillemets doubles autour de la commande entière, et échapper aux guillemets doubles intérieurs avec des barres obliques inverses.

0 votes

@quark67 La version avec les guillemets simples ne fonctionnera pas parce que le shell ne s'étendra pas. $PATH lorsqu'il est entre guillemets simples. L'original PATH n'incluait pas /Library/TeX/texbin Il n'a donc pas pu y trouver de programmes (autres que celui que vous avez spécifiquement indiqué) ; avec des guillemets simples, PATH efficacement seulement contient /Library/TeX/texbin Il ne peut donc pas trouver de programmes ailleurs. Il se peut qu'il n'ait pas besoin de trouver des programmes dans les endroits habituels, mais si c'est le cas, il échouera. En fait, vous n'avez pas remarqué de problème avec les guillemets simples, mais cela ne signifie pas qu'ils fonctionnent réellement.

0 votes

@GordonDavisson Vous avez raison, et pourtant cela fonctionne. Je ne connaissais pas la différence entre ' y " . J'accepte donc la réponse de nohillside qui a fourni une solution opérationnelle (mais je ne l'avais pas vue auparavant, parce que je croyais que \" peut être remplacé par ' ).

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X