0 votos

¿No se respeta el camino?

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/"

He verificado el camino 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 versión local de Emacs está 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é tengo problemas con los caminos? ¿Por qué OS X las ignora? ¿Cómo puedo usar mi copia de Emacs en /usr/local/bin/emacs sin ¿especificando la ruta completa?

0 votos

Si abres una nueva pestaña del terminal, ¿persiste el problema ahí?

0voto

ranklord Puntos 664

Para modificar su PATH de manera que /usr/local/bin está por delante de /usr/bin haz lo siguiente:

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

También es posible que desee modificar /etc/paths para que /usr/local/bin aparece antes que /usr/bin . Tendrás que sudo tu editor para poder hacerlo.

sudo open -t /etc/paths

Tenga en cuenta que si edita /etc/paths existe el riesgo de que las aplicaciones no terminales puedan recoger su versión de construcción local. Para que lo sepas.

Un poco más de información sobre los caminos.

  1. /bin (y /sbin ) estaban pensados para programas que necesitaban estar en un pequeño / partición antes de la más grande /usr etc. se montaron las particiones. Hoy en día, sirve principalmente como una ubicación estándar para los programas clave como /bin/sh aunque la intención original puede seguir siendo relevante para, por ejemplo, las instalaciones en pequeños dispositivos integrados.

  2. /sbin como algo distinto a /bin es para los programas de gestión del sistema (no utilizados normalmente por los usuarios ordinarios) necesarios antes de /usr está montado.

  3. /usr/bin es para los programas de usuario normales gestionados por la distribución.

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

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

  6. /usr/local/sbin como probablemente puedas adivinar a estas alturas, es /usr/local/bin como /usr/sbin a /usr/bin .

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

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

0 votos

El OP ya tenía /usr/local/bin al principio de PATH

0 votos

Sí, gracias, yo también me he dado cuenta. Uno puede (o no) desear omitir el comando correspondiente a voluntad. Por cierto, ¿quién es OP? :)

0 votos

Cartel original :-) BTW, ni siquiera me di cuenta de que la gente entra en guerras santas sobre el uso de /usr/local .

0voto

Descubrí que tenía que reiniciar la máquina para que los cambios tuvieran efecto. Es posible que un cierre de sesión o un inicio de sesión haya tenido el mismo efecto, pero no lo he probado.

0 votos

Si hubieras borrado la tabla hash entonces se habría llamado al nuevo emacs. No es necesario cerrar la sesión o reiniciar.

0 votos

@fd0 - Perdona mi ignorancia... ¿De qué tabla hash estás hablando? ¿Qué tiene que ver con una ruta o un programa?

0 votos

La tabla hash es una función del shell que registra la ruta completa de un comando en la memoria después de una búsqueda PATH. Las llamadas posteriores a un comando se comprueban primero en la tabla hash en lugar de tener que utilizar una búsqueda PATH. Puede encontrar más información con el comando help hash .

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