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
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
0 votos
En cuanto a la adición de /etc / rutas no funciona - que creo que debería ser una pregunta separada, ya que funciona por lo que necesitamos saber exacta tratar de lo que hizo (incluyendo si usted hizo un reinicio que se necesita)
0 votos
@Mark gracias por la aclaración. Consultaré esa pila y realizaré algunas pruebas más y actualizaré esta pila según lo que descubra.
0 votos
Introducir el comando
export PATH=/usr/local/bin:$PATH
no logró nada. No modifica el archivo/etc/paths
. Este archivo ya tenía/usr/local/bin
en su primera línea. Lo que hizo fue cambiar la variable PATH de/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
a/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
.0 votos
@DavidAnderson ejecutando ese comando logró algo , simplemente no se modificó
/etc/paths
. He editado la pregunta para reflejar eso. Cuando ejecuto esoexport
No veo el primer camino dos veces como dices que debería.0 votos
Esta edición confirma que la edición de /etc/rutas debe ser una cuestión separada - exportar etc. no tiene nada que ver con /etc/rutas. exportar .... sí cambia el entorno en su shell actual
0 votos
Si lo veo y luego cambias la pregunta para no verlo, eso no significa que no lo haya visto. Significa que has cambiado la pregunta.