que sospecha que su .bash_profile
o .bashrc
es la adición de .rbenv/shims
a su PATH, y que se está ejecutando en algún momento antes path_helper
se invoca durante la cáscara de puesta en marcha.
La página del manual para path_helper abre con:
The path_helper utility reads the contents of the files in the directo-
ries /etc/paths.d and /etc/manpaths.d and appends their contents to the
PATH and MANPATH environment variables respectively.
El punto crucial aquí es que la utilidad path_helper pretende añadir contenido a una configuración existente PATH
, no las reemplaza. (Y en realidad, lo que realmente hace es anteponer contenidos, no añadirlos, que importa para PATH
las variables ...)
lo tanto, si comienzo con una entrada en mi PATH
, genera el ajuste por path_helper se asegurará de que la entrada continúe en el PATH
que genera.
% echo $SHELL
/bin/bash
% uname
Darwin
% /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"; export PATH;
% PATH="" /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"; export PATH;
% PATH=foo /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo"; export PATH;
Tenga en cuenta que foo
se ha incluido en mi camino en la última línea, a pesar de que el contenido de /etc/paths
y /etc/paths.d/*
no han cambiado.
Al mismo tiempo, la utilidad path_helper también parece tener cuidado, no , para generar rutas con entradas duplicadas; elimina las entradas duplicadas después de concatenar /etc/paths
y /etc/paths.d/*
y la actual PATH
.
Este último detalle puede ser especialmente confuso, ya que puede causar el reordenamiento de entradas en comparación con el ajuste original PATH
(!).
A continuación se muestran algunos ejemplos de este comportamiento: El primer caso muestra un duplicado de foo
que se está eliminando. El segundo y tercer caso ilustran el reordenamiento de entrada: el PATH generado es el mismo en ambos casos, pero en el tercer caso, la entrada /usr/bin
se ha movido de entre foo
y bar
al frente del PATH
. (Esta eliminación de entrada duplicada parece basarse en una simple coincidencia de cadenas en los pares de entradas, como se ilustra en el cuarto caso a continuación, donde la cadena /usr/bin/
permanece entre foo/
y bar
.)
% PATH=foo:foo /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo"; export PATH;
% PATH=foo:bar /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo:bar"; export PATH;
% PATH=foo:/usr/bin:bar /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo:bar"; export PATH;
% PATH=foo/:/usr/bin/:bar /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo/:/usr/bin/:bar"; export PATH;
Por último, para dar crédito a quien lo merece: Mientras que todas las secuencias de comandos anteriores son el resultado de mis propias investigaciones, me sentí inspirado originalmente para estudiar el comportamiento de path_helper
después de leer la nota here , que señaló que path_helper
reutiliza la variable de entorno PATH
establecida por el proceso principal.
Gracias por señalar que, en comparación con los documentos, path_helper * prepede * rutas y elimina duplicados. – algal