1 votos

¿Por qué don ' t veo un camino hacia etags en RUTA cuando se ejecuta Emacs de http://emacsformacosx.com/ de OS X dock?

Esta es una pregunta de seguimiento a la que se " /usr/bin/etags severamente fuera de fecha en Yosemite?"

El Emacs en cuestión es de http://emacsformacosx.com/ (GNU Emacs 24.4.1 (x86_64-apple-darwin13.4.0, NS apple-appkit-1265.21) de 2014-10-20 en builder10-9.porkrind.org).

Si me pongo a Emacs desde el dock, entonces no veo en PATH:

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

Si puedo usar la secuencia de comandos se describe en http://emacsformacosx.com/tips entonces me hacer ver las entradas anteriores en PATH. Pero incluso en este caso, /usr/bin en PATH. Para el uso etags se encuentra en /Applications/Emacs.app/Contents/MacOS/bin-x86_64-10_9 tengo que darle prioridad en alguna manera. Yo normalmente desea ejecutar etags en un script de shell que se inicia en el Emacs shell de búfer.

Por qué no puedo ver estas PATH entradas cuando empiezo a Emacs desde el OS X dock (estoy usando OS X Yosemite)?

En /Applications/Emacs.app/Contents/MacOS/Emacs leí:

Emacs.app palos Emacs.app/Contents/MacOS/{bin,libexec} sobre el final de la el PATH cuando se inicia, por lo que si nos atenemos a nuestra propia dependiente de la arquitectura rutas de acceso en el extremo de la PATH a continuación, se invalidará Emacs caminos mientras que no afectan a cualquiera de las rutas de los usuarios.

1voto

David Caldwell Puntos 111

Esto parece un OS X error junto con diferente comportamiento indefinido en Ruby y Emacs.

La causa root es que a la hora de lanzar Emacs desde el Finder de OS X está pasando el PATH variable de entorno para el proceso dos veces! Escribí un caso de prueba y la presentó a Apple bug reporter (id 19801095). Este es mi caso de prueba:

#!/bin/bash

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

cat > /tmp/test.app/Contents/MacOS/test <<EOF
#!/usr/bin/env ruby
\$stdout.reopen('/tmp/test.app.log', "w")
ENV.each_pair {|k,v| puts "#{k}=#{v}" if k == 'PATH' }
EOF
chmod +x /tmp/test.app/Contents/MacOS/test

launchctl setenv PATH "Extra PATH"
open -W /tmp/test.app
cat /tmp/test.app.log
launchctl unsetenv PATH

Si usted guardar y, a continuación, ejecutarlo desde la Terminal, a continuación, se imprimirá:

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

Esto sólo sucede en 10.10. 10.9 sólo se imprime una PATH.

Así que esa es la causa de la root. Lo que realmente está pasando? El Emacs de http://emacsformacosx.com utiliza un Rubí lanzador de secuencia de comandos para que se pueda enviar un binario que se ejecuta de forma óptima en OS X se instala de 10.6 a 10.10. Este lanzador de secuencia de comandos de manipulación de los PATH:

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

Por lo ENV['PATH'] sólo manipula la primera instancia de PATH en la lista. Cuando Emacs lanza, sólo presta atención a la última instancia de PATH. Que es derecho? Bueno, POSIX habla sobre este caso en la especificación:

Si hay más de una cadena en un entorno de un proceso tiene el mismo nombre, las consecuencias son indefinidos.

Eso significa que ninguno de estos programas son técnicamente en el mal.

Ok, así que ¿por qué se comportan de manera diferente desde la Terminal? Eso es porque algo está filtrando el duplicado PATHs en el medio ambiente cuando se ejecuta desde la Terminal. Sospecho bash. Pero también podría ser Terminal.app. De cualquier manera, no sólo una PATH en el entorno y el Rubí launcher y Emacs se comunican correctamente.

Así que ¿cuál es la solución entonces? Creo que el Ruby lanzador necesita cambiar para lidiar con esto, ya que es el comportamiento predeterminado en 10.10. Eso es una vergüenza, ya que es simplemente más información antigua. Por suerte (como se puede ver en la anterior secuencia de comandos de prueba), Ruby puede llegar a tanto PATHs por lo que se puede filtrar todo, pero la última instancia hacer que funcione de la misma manera Emacs obras.

Edit: ahora Hay un informe de fallo en el Emacs proyecto de construir

Edit: Esto ya se ha solucionado. Todas las noches se construye después de 11 de febrero y libera comienzo con un 24,5 debería funcionar (24.5 es actualmente un pretest, pero debe ser publicado próximamente).

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X