¿Cuál es la diferencia entre "echo $ PATH" y / etc / paths?

10

Cuando me echo $ PATH me sale esto: Users/myusername/.node_modules_global/bin:/Users/mac/.node_modules_global/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/mac/Library/Android/sdk/platform-tools:/platform-tools.

Quiero eliminar algunas rutas de esto, pero cuando abro el archivo usando el comando vim /etc/paths, obtengo los siguientes resultados:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

¿Es el archivo / etc / caminos diferente de la variable $ PATH?

nivel0
fuente
¿Qué versión de OS X? No tengo /etc/pathsen el mío, pero estoy corriendo 10.4.11y las cosas probablemente han cambiado desde entonces
Fox
1
Pero de acuerdo con una respuesta en AskDifferent , /etc/pathsse utiliza para generar el valor por defecto $PATH, que se puede modificar más adelante
Fox
Es lo predeterminado. Para cuando el usuario inicie su shell, sin embargo, sería modificado por otros archivos que las fuentes de shell, como ~/.bashrco~/.profile
Sergiy Kolodyazhnyy

Respuestas:

14

/etc/pathses parte de lo que se usa para configurar $PATHprocesos de shell. Cuando abre una nueva ventana de Terminal, se inicia bash, que ejecuta varios scripts de inicio: /etc/profileAND ~/.bash_profileOR (si eso no existe) ~/.bash_loginOR (si eso tampoco existe) ~/.profile. Estas secuencias de comandos configuran el entorno de shell, incluido $PATH.

Una de las cosas que /etc/profilehace es ejecutar /usr/libexec/path_helper, que lee /etc/pathsy cualquier archivo /etc/paths.d, y agrega sus contenidos $PATH. Pero esto es solo un punto de partida; su propio script de inicio (si existe) puede agregarlo $PATH, editarlo, reemplazarlo por completo, etc.

Me parece que su script de inicio (y / o las cosas que ejecuta) está agregando una serie de entradas al conjunto básico del que obtiene /etc/paths. "Users / myusername / .node_modules_global / bin: /Users/mac/.node_modules_global/bin:" se agrega al principio de $PATH(lo que significa que esos directorios se buscarán primero) y ": / Users / mac / Library / Android / sdk / platform-tools: / platform-tools "se agrega al final. Si desea saber exactamente qué los está agregando, debe mirar su script de inicio.

Por cierto, este proceso de configuración $PATHsolo se aplica a los shells de "inicio de sesión" de bash. Cualquier cosa ejecutada por un shell bash heredará $PATHde él, por lo que probablemente tenga esencialmente lo mismo. Los shells de bash sin inicio de sesión siguen un proceso de configuración algo diferente. Otros shells, y las cosas que no comenzaron desde un shell (por ejemplo, trabajos cron) pueden ser completamente diferentes $PATHs.

Gordon Davisson
fuente
Tenga en cuenta que para shells que no son de inicio de sesión (p. Ej. /usr/local/bin/bash, Según lo instalado por brew, sin el -largumento), /usr/libexec/path_helperno se usa y /usr/local/binno se incluye de manera predeterminada en $PATH. Para usar path_helperen un script o interactivamente, el comando es eval $(/usr/libexec/path_helper).
Kyle Strand
0

Los primeros lugares en los que buscaría verificar las modificaciones son,

~/.profile
~/.bashrc
~/.bash_profile

Si está usando algo que no es Bash, verifique los archivos de configuración para ver cualquier mención de PATH.

rovr138
fuente