¿Cómo se construye mi variable $ PATH en Mountain Lion?

5

Recientemente instalé Homebrew en mi Mac y se queja de que /usr/bin ocurre antes de /usr/local/bin en mi $PATH variable, lo que significa que se utilizarán los programas proporcionados por el sistema en lugar de los instalados con Homebrew.

Mi .bashrc está configurado en un conjunto de archivos separados, según este screencast . Esto significa que ~/.bash_profile tiene este aspecto:

if [ -f ~/.bashrc ];
then
  source ~/.bashrc
fi

~/.bashrc tiene este aspecto:

source ~/bin/dotfiles/bashrc

y ~/bin/dotfiles/bashrc tienen este aspecto:

. ~/bin/dotfiles/bash/env
. ~/bin/dotfiles/bash/config
. ~/bin/dotfiles/bash/aliases

~/bin/dotfiles/bash/env , que es donde configuro mi variable $PATH , tiene este aspecto:

export EDITOR="kom"
export PATH=some/path/at/start:usr/local/bin:/Users/jim/pear/bin:~/bin:/Users/jim/.gem/ruby/1.8/bin:/Users/jim/bin/bashscripts:some/path/at/end:$PATH

He agregado some/path/at/start y some/path/at/end para fines de depuración, ya que cuando intento echo $PATH obtengo esto:

/opt/local/bin:/opt/local/sbin:/Users/jim/bin:/opt/local/bin:/opt/local/sbin:some/path/at/start:usr/local/bin:/Users/jim/pear/bin:/Users/jim/bin:/Users/jim/.gem/ruby/1.8/bin:/Users/jim/bin/bashscripts:some/path/at/end:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

Es decir, hay una carga de otras cosas que se están cargando en la variable $ PATH que no puedo controlar en la configuración que he descrito anteriormente. ¿Alguna idea sobre desde dónde se carga este material, para que pueda cambiarlo y mover /usr/local/bin antes de /usr/bin ?

    
pregunta Jim 17.09.2012 - 16:49

3 respuestas

2

Si corrige el error tipográfico en su asignación PATH y reemplaza usr/local/bin con /usr/local/bin Homebrew debería dejar de quejarse.

Las otras cosas ( /opt/local/... ) se agregan definitivamente en algún lugar más adelante durante la inicialización del shell (es decir, después de source ~/.bashrc o después de . ~/bin/dotfiles/bash/env ). Deberá revisar los diferentes archivos (o grep para /opt/local o PATH.*PATH ) para ver dónde sucede (y por qué).

    
respondido por el nohillside 17.09.2012 - 16:54
2

La sección de INVOCACIÓN de la página de manual de bash dice

  

Cuando se invoca a bash como un shell de inicio de sesión interactivo, o como un shell no interactivo con la opción --login, primero lee y ejecuta los comandos del archivo / etc / profile, si ese archivo existe. Despues de leer   ese archivo, busca ~ / .bash_profile, ~ / .bash_login, y   ~ / .profile, en ese orden, y lee y ejecuta comandos desde el   el primero que existe y es legible.

De particular interés es /etc/profile , que usa path_helper para construir una ruta a partir de lo que encuentra en /etc/paths y /etc/paths.d/* .

    
respondido por el Harald Hanche-Olsen 17.09.2012 - 20:58
1

También está el sistema bashrc para todo el sistema, que se encuentra en / etc / bashrc, y un par de otros.

Desde man bash : -

FILES
       /bin/bash
              The bash executable
       /etc/profile
              The systemwide initialization file, executed for login shells
       ~/.bash_profile
              The personal initialization file, executed for login shells
       ~/.bashrc
              The individual per-interactive-shell startup file
       ~/.bash_logout
              The individual login shell cleanup file, executed when a login shell exits
       ~/.inputrc
              Individual readline initialization file
    
respondido por el Alex Leach 17.09.2012 - 20:04

Lea otras preguntas en las etiquetas