es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se puede crear una variable de entorno permanente en un script bash de make?

Intento establecer una variable de entorno de usuario utilizando la entrada de un usuario en un script bash que se ejecuta en un makefile.

all:
    if [ ! $(ENV_VAR) ] ; then \
        read -p "¿Cuál es la variable?" env_var; \
        if [[ $$env_var == valid_value || $$env_var == other_valid_value ]]; then \
            echo export ENV_VAR=$$env_var >> /home/userName/.bashrc; \
            source /home/userName/.bashrc; \
            else \
                echo $$env_var es un valor no válido; Inténtalo de nuevo; \
        fi; \
    fi

Este código no funciona. ¿Hay alguna manera de ejecutar el comando source en un script bash?

Aquí hay un ejemplo de la salida:

¿Cuál es la variable? valid_value
¿Cuál es la variable? valid_value
¿Cuál es la variable? valid_value
...

Después de ejecutar el script, el archivo ~/.bashrc sí recibió el comando de exportación apropiado. Ejecutar source después del script crea la variable de entorno que necesito. Solo necesito que se ejecute en el script make.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de ejecutar source en un script de bash. Sin embargo, esto no funcionará en un archivo makefile, ya que make no ejecuta los comandos de shell dentro de una única instancia de shell.

    Para solucionar esto, puedes crear un script de shell que establezca la variable de entorno del usuario y ejecute el archivo .bashrc. Luego, puedes llamar a este script de shell desde el makefile.

    Por ejemplo, crea un script de shell llamado set_env_var.sh con el siguiente contenido:

    #!/bin/bash
    
    if [ -z "$1" ]; then
        echo "Uso: $0 <env_var>"
        exit 1
    fi
    
    env_var="$1"
    
    if [[ "$env_var" == valid_value || "$env_var" == other_valid_value ]]; then
        echo "export ENV_VAR=$env_var" >> /home/userName/.bashrc
        source /home/userName/.bashrc
    else
        echo "$env_var es un valor inválido; Inténtalo de nuevo."
        exit 1
    fi
    

    Luego, en el makefile, puedes llamar a este script de la siguiente manera:

    all:
        if [ -z "$(ENV_VAR)" ]; then \
            read -p "¿Cuál es el valor de la variable?" env_var; \
            ./set_env_var.sh "$$env_var"; \
        fi
    

    Esto pedirá al usuario que ingrese el valor para la variable de entorno, y luego el script set_env_var.sh lo establecerá y ejecutará el archivo .bashrc. Ten en cuenta que ./set_env_var.sh asume que el script se encuentra en el mismo directorio que el makefile. Si se encuentra en otra ubicación, deberás ajustar la ruta en consecuencia.

Comments are closed.