1 votes

Pourquoi ne vois-je pas un chemin vers etags dans PATH lorsque je lance Emacs depuis http://emacsformacosx.com/ depuis le dock OS X ?

Ceci est une question de suivi par rapport à celle-ci à "Is /usr/bin/etags severely out of date in Yosemite?"

L'Emacs en question provient de https://emacsformacosx.com/ (GNU Emacs 24.4.1 (x86_64-apple-darwin13.4.0, NS apple-appkit-1265.21) du 20-10-2014 sur builder10-9.porkrind.org).

Si je lance Emacs depuis le dock, alors je ne vois pas dans PATH:

/Applications/Emacs.app/Contents/MacOS/bin-x86_64-10_9:/Applications/Emacs.app/Contents/MacOS/libexec-x86_64-10_9

Si j'utilise le script décrit à https://emacsformacosx.com/tips alors je vois les entrées ci-dessus dans PATH. Mais même dans ce cas, /usr/bin arrive en premier dans PATH. Pour utiliser etags trouvé dans /Applications/Emacs.app/Contents/MacOS/bin-x86_64-10_9, je dois lui accorder la priorité d'une certaine manière. J'ai généralement l'intention d'exécuter etags dans un script shell qui est démarré dans le buffer shell d'Emacs.

Pourquoi je ne vois pas ces entrées PATH lorsque je lance Emacs depuis le dock OS X (J'utilise OS X Yosemite)?

À /Applications/Emacs.app/Contents/MacOS/Emacs je lis:

Emacs.app ajoute Emacs.app/Contents/MacOS/{bin,libexec} à la fin du PATH lors de son démarrage, donc si nous ajoutons nos propres chemins dépendants de l'architecture à la fin du PATH alors ils remplaceront les chemins d'Emacs sans affecter les chemins de l'utilisateur.

1voto

David Caldwell Points 111

Cela ressemble à un bug OS X couplé à des comportements indéfinis différents dans Ruby et Emacs.

La cause principale est que lors du lancement d'Emacs depuis Finder, OS X passe la variable d'environnement PATH au processus deux fois! J'ai écrit un cas de test et l'ai soumis au rapport de bug d'Apple (identifiant 19801095). Voici mon cas de test :

#!/bin/bash

mkdir -p /tmp/test.app/Contents/MacOS/

cat > /tmp/test.app/Contents/MacOS/test <

``

Si vous enregistrez cela et l'exécutez ensuite depuis le Terminal, cela affichera :

PATH=/usr/bin:/bin:/usr/sbin:/sbin
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
PATH=Extra PATH

Cela se produit uniquement sur 10.10. 10.9 n'affichera qu'un seul PATH.

Donc voilà la cause principale. Qu'est-ce qui se passe réellement? L'Emacs de http://emacsformacosx.com utilise un script de lancement en Ruby afin de pouvoir expédier un binaire qui s'exécute de manière optimale sur les installations OS X de 10.6 à 10.10. Ce script de lancement manipule le PATH :

ENV['PATH'] += ':' + File.join(base_dir,     "bin-#{arch_version}") +
               ':' + File.join(base_dir, "libexec-#{arch_version}")

Ainsi, ENV['PATH'] ne manipule que la première instance de PATH dans la liste. Lorsqu'Emacs se lance, il ne prête attention qu'à la dernière instance de PATH. Laquelle est correcte? Eh bien, POSIX parle de ce cas dans la spécification:

Si plus d'une chaîne dans l'environnement d'un processus a le même nom, les conséquences sont indéfinies.

Cela signifie que aucun de ces programmes n'est techniquement fautif.

D'accord, pourquoi cela se comporte-t-il différemment depuis le Terminal? C'est parce que quelque chose filtre les doublons de PATH dans l'environnement lorsque vous exécutez depuis le Terminal. Je soupçonne bash. Mais cela pourrait également être Terminal.app. De toute façon, il n'y a qu'un seul PATH dans l'environnement et donc le script de lancement Ruby et Emacs communiquent correctement.

Alors quelle est la solution alors? Je pense que le script de lancement Ruby doit être modifié pour gérer cela, puisque cela semble être le comportement par défaut dans 10.10. C'est dommage, car cela ajoute juste plus de bric-à-brac. Heureusement (comme vous pouvez le voir dans le script de test ci-dessus), Ruby peut accéder aux deux PATHs afin de filtrer tout sauf la dernière instance, ce qui le ferait fonctionner de la même manière qu'Emacs.

Édition : Il y a maintenant un rapport de bug sur le projet de construction Emacs

Édition : Cela est maintenant corrigé. Les versions nightly après le 11 février et les versions débutant par 24.5 devraient fonctionner (24.5 est actuellement en version prétest mais devrait être publié prochainement).

``

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