programas - ¿Volver a cargar.profile en script bash shell(en Unix)?
shell script linux (5)
El script bash se ejecuta en una subshell separada. Para que esto funcione, también necesitará obtener este otro script.
Soy nuevo en las secuencias de comandos de shell bash, y he encontrado un desafío. Sé que puedo volver a cargar mi archivo ".profile" con solo hacer:
. .profile
pero estoy tratando de ejecutar lo mismo en un script bash que estoy escribiendo y simplemente no está funcionando. ¿Algunas ideas? ¿Algo más que pueda proporcionar para aclarar?
Gracias
Intenta esto para volver a cargar tu caparazón actual:
source ~/.profile
Prueba esto:
cd
source .bash_profile
Se producen un par de problemas cuando se intenta cargar / descargar el archivo ~ / .profile. [Esto se refiere a Ubuntu Linux - en algunos casos los detalles de los comandos serán diferentes]
- ¿Estás ejecutando esto directamente en la terminal o en un script?
- ¿Cómo se ejecuta esto en un script?
Anuncio. 1)
Ejecutar esto directamente en la terminal significa que no habrá subcategoría creada. Entonces puedes usar dos comandos:
source ~/.bash_profile
o
. ~/.bash_profile
En ambos casos, esto actualizará el entorno con los contenidos del archivo .profile.
Anuncio 2) Puede iniciar cualquier secuencia de comandos bash ya sea llamando
sh myscript.sh
o
. myscript.sh
En el primer caso, esto creará una subshell que no afectará las variables de entorno de su sistema y solo será visible 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 PIERDEN MUCHO TIEMPO.
Para que los cambios aplicados en el script tengan efecto en el entorno global, el script debe ejecutarse con
.myscript.sh
mando.
Para asegurarse de que su script no se ejecuta en un subshel puede usar esta función. (De nuevo, el ejemplo es para el shell 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 borre algunos de los malentendidos más comunes! : D ¡Buena suerte!
Tratar:
#!/bin/bash
# .... some previous code ...
# help set exec | less
set -- 1 2 3 4 5 # fake command line arguments
exec bash --login -c ''
echo $0
echo $@
echo my script continues here
'' arg0 "$@"