¿La ruta no se cumple?

0

Tengo lo siguiente en mi .bash_profile :

$ cat ~/.bash_profile 
# Prompt
export PS1="\h:\W$ "

# Standard path
export PATH="/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:
/opt/local/bin:/opt/local/sbin"

# Android
export ANDROID_NDK_ROOT=/opt/android-ndk
export ANDROID_SDK_ROOT=/opt/android-sdk
export JAVA_HOME='/usr/libexec/java_home'
export ANDROID_HOME="$HOME/.android"

export PATH="$PATH:$ANDROID_SDK_ROOT/tools/":"$ANDROID_SDK_ROOT/platform-tools/"

Verifiqué la ruta con:

$ echo $PATH
/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/opt/local/bin:
/opt/local/sbin:/opt/android-sdk/tools/:/opt/android-sdk/platform-tools/

Mi compilación local de Emacs se encuentra en /usr/local/bin . Acabo de construirlo e instalarlo:

$ which emacs
/usr/local/bin/emacs

Cuando ejecuto Emacs, obtengo el de /usr/bin :

$ emacs --version
GNU Emacs 22.1.1
...
$ /usr/bin/emacs --version
GNU Emacs 22.1.1
...
$ /usr/local/bin/emacs --version
GNU Emacs 24.5.1
...

¿Por qué estoy teniendo problemas con los caminos? ¿Por qué OS X los ignora? ¿Cómo puedo usar mi copia de Emacs en /usr/local/bin/emacs sin especificar la ruta completa?

    
pregunta jww 04.02.2016 - 00:48

2 respuestas

0

Encontré que tuve que reiniciar la máquina para que los cambios surtan efecto. Un cierre de sesión / inicio de sesión puede haber tenido el mismo efecto, pero no lo intenté.

    
respondido por el jww 12.06.2017 - 11:21
1

Con el fin de modificar su PATH para que /usr/local/bin va por delante de /usr/bin hace lo siguiente:

  1. ejecuta . ~/.bash_profile
  2. ejecuta PATH="/usr/local/bin:$PATH" en el shell actual
  3. reiniciar Terminal

Es posible que también desee modificar /etc/paths para que /usr/local/bin aparezca antes de /usr/bin . Necesitará sudo su editor para hacer eso.

sudo open -t /etc/paths

Tenga en cuenta que si edita /etc/paths , existe el riesgo de que las aplicaciones que no son de terminal detecten su versión de compilación local. Sólo FYI.

Un poco más de información sobre las rutas.

  1. /bin (y /sbin ) se destinaron a programas que necesitaban estar en una pequeña partición / antes de que se montaran las particiones mayores /usr , etc. En estos días, principalmente sirve como una ubicación estándar para programas clave como /bin/sh , aunque la intención original todavía puede ser relevante, por ejemplo. instalaciones en pequeños dispositivos embebidos.

  2. /sbin , a diferencia de /bin , es para programas de administración del sistema (que normalmente no utilizan los usuarios normales) necesarios antes de que /usr se monte.

  3. /usr/bin es para programas de usuario normal administrados por distribución.

  4. Hay un /usr/sbin con la misma relación con /usr/bin que /sbin tiene con /bin .

  5. /usr/local/bin es para programas de usuario normales no administrados por el administrador de paquetes de distribución, por ejemplo. Paquetes compilados localmente. No debe instalarlos en /usr/bin porque las futuras actualizaciones de la distribución pueden modificarlos o eliminarlos sin previo aviso.

  6. /usr/local/sbin , como probablemente pueda adivinar en este punto, es /usr/local/bin como /usr/sbin a /usr/bin .

Esta fuente ayuda a explicar el estándar de jerarquía del sistema de archivos en un nivel más profundo.

Y puede encontrar este artículo sobre el uso y abuso de /usr/local/bin también interesante.

    
respondido por el Denis Rasulev 04.02.2016 - 04:35

Lea otras preguntas en las etiquetas