Pregunta

Soy nuevo en Bash Shell Scripting, y he encontrado un desafío.Sé que puedo volver a cargar mi archivo ".profile" simplemente haciendo:

. .profile

Pero estoy tratando de ejecutar lo mismo en un script de bash que estoy escribiendo y simplemente no funciona. ¿Algunas ideas?¿Algo más que pueda proporcionar para aclarar?

gracias

¿Fue útil?

Solución

Intente esto para volver a cargar su shell actual:

source ~/.profile

Otros consejos

Intenta esto:

cd 
source .bash_profile

surge un par de problemas al intentar volver a cargar / fuente ~ / .profile archivo. [Esto se refiere a Ubuntu Linux, en algunos casos, los detalles de los comandos serán diferentes]

  1. ¿Está ejecutando esto directamente en la terminal o en un script?
  2. ¿Cómo corres esto en un guión?
  3. ad. 1)

    Ejecutar esto directamente en terminal significa que no habrá subshell creado. Para que pueda usar dos comandos:

    source ~/.bash_profile
    

    o

    . ~/.bash_profile
    

    En ambos casos, esto actualizará el entorno con el archivo .profile.

    ad 2) Puede iniciar cualquier script de 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 serán visibles solo para el proceso de subsol. Después de terminar el comando subshell, ninguna de las exportaciones, etc. no se aplicará. Este es un error común y hace que muchos desarrolladores pierdan mucho tiempo.

    Para que sus cambios se apliquen en su script para tener efecto para el entorno global, el script debe ejecutarse con

    .myscript.sh
    

    comando.

    Para asegurarse de que su script no se ha ejecutado en un subparejo, puede usar esta función. (De nuevo el ejemplo es para la concha 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 despeja algunos de los malentendidos comunes! :D Buena suerte!

El guión bash se ejecuta en un subshell separado.Para que este trabajo también deberá obtener este otro script.

intento:

#!/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 "$@"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top