
Configuré algunas variables de entorno en una terminal y luego ejecuté mi script. ¿Cómo puedo introducir las variables en el script? Necesito conocer sus valores. Simplemente referirse a ellos como $MY_VAR1
no funciona; Esta vacio.
Respuesta1
Si las variables son verdaderamente variables de entorno (es decir, se han exportado con export
) en el entorno que invoca su script, entoncesharíaestar disponible en su script. El hecho de que no lo sean sugiere que no los ha exportado o que ejecuta el script desde un entorno donde simplemente no existen ni siquiera como variables de shell.
Ejemplo:
$ cat script.sh
#!/bin/sh
echo "$hello"
$ sh script.sh
(una línea de salida vacía ya que hello
no existe en ninguna parte)
$ hello="hi there"
$ sh script.sh
(todavía solo una línea vacía como salida ya que hello
es solo una variable de shell, no una variable de entorno)
$ export hello
$ sh script.sh
hi there
Alternativamente, para configurar la variable de entorno solo para este script y no en el entorno de llamada:
$ hello="sorry, I'm busy" sh script.sh
sorry, I'm busy
$ env hello="this works too" sh script.sh
this works too
Respuesta2
Debe asegurarse de exportar las variables de entorno a las que desea tener acceso en su secuencia de comandos antes de invocarla. ES DECIR:
Unix> export MY_TEMP=/tmp
Unix> some_script.sh
Ahora some_script.sh tendría acceso a $MY_TEMP: cuando invocas un script de shell, obtienes un nuevo entorno, con solo variables exportadas, a menos que lo "obtengas" precediendo el comando del script con un punto (".") y un espacio, luego el nombre de tu script:
Unix> . some_script.sh # runs in current environment
Consejo de depuración: incluya cerca de la parte superior de su secuencia de comandos el set
comando para ver qué variables puede ver su secuencia de comandos.
Respuesta3
También tenga en cuenta que si desea que solo vivan "mientras dure la ejecución del script", puede colocar sus exportaciones en un archivo y luego obtener ese archivo dentro de su script.
Porque cuando ejecutas un script, se ejecutará en un nuevo shell, de esta manera esas variables se exportarán en ese subshell (y sus descendientes) únicamente y no terminarán en tu propio shell, es decir, se verá como si los desarmas automáticamente después del final de la ejecución del script.
Ejemplo:
# config.txt
export SECRET=foobar
# prog.sh
#!/usr/bin/env sh
source ./config.txt
echo $SECRET
Ahora ejecútelo:
chmod +x prog.sh
./prog.sh
y luego confirme que la variable SECRET no se ha filtrado a su propio shell:
echo $SECRET # <-- must echo a blank line