4 votos

Exportar el PATH directamente desde la línea de comandos en Yosemite--¿Dónde está mi PATH?

Quiero utilizar la última versión de git que instalé a través de Homebrew, por lo que necesitaba cambiar mi PATH para asegurarse de que OS X utiliza la versión Homebrew en lugar de la versión obsoleta que viene con OS X y Command Line Tools. Este tutorial recomienda simplemente correr:

$ export PATH=/usr/local/bin:$PATH

Eso es lo que hice y funcionó muy bien.

Mi pregunta es: ¿dónde ha modificado este comando mi PATH ¿variable? No tengo ~/.bashrc , ~/.bash_profile o ~/.profile archivos en mi directorio de inicio en absoluto, pero cuando $ echo $PATH entonces el PATH parece correcto y cuando se ejecuta which git y git --version todo parece apuntar al lugar correcto. Veo las rutas correctas que aparecen en /etc/paths pero si añado una ruta de prueba utilizando export desde la línea de comandos, la ruta de prueba no aparece en ese archivo.

Otra pregunta: ¿es esta una buena forma de modificar mi PATH ¿variable?

Pregunta final: ¿cuáles son las ventajas e inconvenientes de este método?

Editar: Veo las rutas correctas listadas en /etc/paths pero si añado una ruta de prueba utilizando $ export PATH=/test:$PATH entonces la ruta de prueba no aparece en /etc/paths/ pero aparece primero cuando ejecuto $ echo $PATH Sin embargo, se pierde después de reiniciar.

0 votos

Esto es un duplicado de muchos (y tienes varias preguntas aquí) - sin embargo /usr/local/bin está en tu ruta por defecto establecida en /etc/paths

1 votos

@Mark Creo que mi pregunta principal es más específica que la mayoría de las preguntas que he visto sobre el tema. Todavía no he visto una pregunta en la que se responda. Así que decirme que es un duplicado es esencialmente decir "alguien en algún lugar respondió a tu pregunta" pero omitiendo dónde puede estar la respuesta dentro de un vasto cuerpo de preguntas y respuestas. Si me indica la dirección correcta, sería de gran ayuda. Si la respuesta se encuentra en otro lugar, eliminaré mi pregunta con mucho gusto. Gracias.

0 votos

Lo siento, dejé la segunda parte del comentario como la respuesta hasta que pude encontrar un duplicado decente y encontré uno, pero me olvidé de darle ver apple.stackexchange.com/a/121021/237 - y ver lo que la respuesta lista en /etc/path. También por favor, comente lo que no se explica en esa respuesta, ya que tenemos que conseguir una respuesta canónica establecido - por lo que la próxima persona no tiene que hacer toda la búsqueda

3voto

David Anderson Puntos 2189

El 3 de junio publicaste el siguiente comentario

@DavidAnderson Así que si entiendo correctamente, la ejecución de export PATH... desde una sesión de shell interactiva sólo afecta a $PATH para esa sesión y la ruta recién añadida no se guarda en ningún lugar (y por lo tanto no hay ningún archivo donde la ruta recién añadida pueda ser editada). Por ejemplo, si ejecuto export PATH=/test:$PATH pero quiero exportar el directorio /testing_123 en su lugar, entonces mi mejor opción es simplemente iniciar una nueva sesión en lugar de intentar localizar y editar un archivo que contenga el erróneo directorio /test (porque no existe tal archivo). ¿Correcto?

Mi respuesta a su comentario

De la página del manual de bash, he extraído lo siguiente.

A parameter is an entity that stores values.  It can be a name, a
number, or one of the special characters listed below under Special
Parameters.  A variable is a parameter denoted by a name.  A variable 
has a value and zero or more attributes.

PATH es el nombre de una variable. Normalmente, esta variable sólo tiene activado el atributo de exportación. El atributo export marca una variable para exportarla a los comandos posteriores a través del entorno. El export activa el atributo de exportación, pero en el caso del PATH el atributo de exportación ya está activado. Por lo tanto, para el PATH los siguientes cuatro comandos son equivalentes.

PATH=/test:$PATH
export PATH=/test:$PATH
declare PATH=/test:$PATH
typeset PATH=/test:$PATH

En cuanto a tu comentario, tienes razón. No existe tal archivo.

En el caso de un error del tipo que mencionas, no creo que iniciar una nueva sesión sea la mejor opción. Yo introduciría el comando

declare -p PATH

y luego resaltar la salida. A continuación, puede cortar y pegar el texto como su siguiente comando. Antes de pulsar la tecla de retorno, utilice las otras teclas para corregir su error.

Para más información sobre este tema, consulte la página del manual de bash. Introduzca el comando

man bash

o visite el sitio: bash - GNU Bourne-Again SHell .

En respuesta a su edición:

Sí, se supone que al reiniciar se pierde /test en la variable PATH. Por eso hay que poner un export en su ~./profile archivo.

Respuesta original:

Parece confundido cuando el ~/.bashrc , ~/.bash_profile y ~/.profile los archivos se ejecutan. Tal vez esto ayude.

Así es como configuro mi ordenador. Tengo tres archivos: ~/.profile , ~/.bashrc y ~/.bashcm . Si te falta alguno de ellos, puedes crearlo.

Cuando inicio la aplicación Terminal o selecciono "Nueva Ventana" de "Shell" en la barra de menú, se invoca un shell interactivo de inicio de sesión bash. Este shell ejecuta el ~/.profile scriptal inicio. Puede sustituir ~/.bash_profile o ~/.bash_login para ~./profile si lo desea. Si se inicia un shell bash interactivo que no es un shell de inicio de sesión, el shell lee y ejecuta los comandos de ~/.bashrc . El propósito de ~/.bashcm es proporcionar un script común que sea ejecutado por ambos ~/.profile y ~/.bashrc .

Este es un ejemplo de .profile archivo

echo in .profile
source ~/.bashcm
export PATH=$PATH:~/bin
echo exit .profile

El propósito de los comandos echo es ilustrar cuando se ejecutan los scripts. Una vez que te sientas cómodo, puedes comentarlos o eliminarlos. El .profile el archivo se ejecuta .bashcm script, luego modifica la variable PATH y sale. Un ejemplo .bashcm se muestra a continuación.

echo in bashcm
PS1='\h:\W \u\$ '
alias home='cd ~'
echo exit .bashcm

Aparte de los comandos de eco, .bashcm sólo establece el prompt y un alias. El ejemplo .bashrc que se muestra a continuación simplemente ejecuta el .bashcm script. De nuevo, los comandos echo son sólo para fines ilustrativos.

echo in .bashrc
source ~/.bashcm
echo exit .bashrc

Si inicio la aplicación Terminal e introduzco los comandos

echo $PATH
alias
bash
echo $PATH
alias

in the window, I get the following.

Last login: Wed May 27 14:48:19 on ttys000
in .profile
in bashcm
exit .bashcm
exit .profile
Steelhead:~ davidanderson$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/davidanderson/bin
Steelhead:~ davidanderson$ alias
alias home='cd ~'
Steelhead:~ davidanderson$ bash
in .bashrc
in bashcm
exit .bashcm
exit .bashrc
Steelhead:~ davidanderson$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/davidanderson/bin
Steelhead:~ davidanderson$ alias
alias home='cd ~'
Steelhead:~ davidanderson$

0 votos

export realmente se asegura de que PATH es visible en los procesos ejecutados desde el shell. Sin export Las variables sólo son visibles en el proceso actual (shell), no en los procesos hijos.

1 votos

@DavidAnderson Entonces, si entiendo bien, correr export PATH... desde una sesión de shell interactiva sólo afecta a $PATH para esa sesión y la ruta recién añadida no se guarda en ningún sitio (y por lo tanto no hay ningún archivo donde se pueda editar la ruta recién añadida). Por ejemplo, si ejecuto export PATH=/test:$PATH pero quería exportar el /testing_123 dir en su lugar, entonces mi mejor opción es simplemente iniciar una nueva sesión en lugar de intentar localizar y editar un archivo que contenga el error /test dir (porque no existe tal archivo). ¿Correcto?

0 votos

@patrix: Investigando un poco más, resulta que el uso de export es opcional para el PATH variable. Así, por ejemplo, PATH=$PATH:~/bin equivaldría a export PATH=$PATH:~/bin . Para que los dos comandos actúen de forma diferente, primero habría que introducir el declare +x PATH de mando. Esto desactivaría el atributo de exportación.

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