Un par de problemas surgen cuando se trata de recargar/fuente ~ archivo /.profile [Esto se refiere a Ubuntu Linux - en algunos casos, los detalles de los comandos serán diferentes]
- ¿Está ejecutando esto directamente en el terminal o en un script?
- ¿Cómo se ejecuta esto en un script?
Ad. 1)
Al ejecutar esto directamente en el terminal significa que no se creará ninguna subcapa. Así que usted puede utilizar cualquiera de dos comandos:
source ~/.bash_profile
o
. ~/.bash_profile
En ambos casos esto actualizará el medio ambiente con el contenido del archivo .profile.
Ad 2) Puede iniciar cualquier escritura del golpe, ya sea llamando
sh myscript.sh
o
. myscript.sh
En el primer caso, esto será crear un subnivel que no afectará a las variables de entorno de su sistema y serán visibles solo para el proceso de subshell. Después de terminar el comando de subshell, no se aplicarán ninguna de las exportaciones, etc. ESTE ES UN ERROR COMÚN Y CAUSA QUE MUCHOS DESARROLLADORES PIERDAN MUCHO TIEMPO.
Para que los cambios aplicados en la secuencia de comandos en sus efectos para el medio ambiente mundial el guión tiene que ser ejecutado con el comando
.myscript.sh
.
Para asegurarse de que su script no se ejecuta en un subshello puede usar esta función. (De nuevo ejemplo es para la cáscara de Ubuntu)
#/bin/bash
preventSubshell(){
if [[ $_ != $0 ]]
then
echo "Script is being sourced"
else
echo "Script is a subshell - please run the script by invoking . script.sh command";
exit 1;
fi
}
Espero que esto aclare algunos de los malentendidos comunes! : D ¡Buena suerte!
Como Ignacio señala a continuación, su secuencia de comandos se ejecuta en una subshell. La subshell no puede modificar el shell principal (el proceso hijo no puede modificar su principal). Por lo tanto, debe "generar" el script utilizando el "." comando (que también se puede escribir como "fuente"). Entonces, si su script quiere, digamos, modificar variables de entorno, necesita hacer algo como "source myscript" o ". Myscript" (ambos significan lo mismo). Esto modificará el entorno de tu caparazón principal. (Lo cual creo que es lo que estás tratando de hacer, házmelo saber si esto está mal.) – bstpierre
Recibí mi respuesta de tu pregunta :) –