importar variáveis ​​de ambiente em um script bash

importar variáveis ​​de ambiente em um script bash

Defino algumas variáveis ​​de ambiente em um terminal e executo meu script. Como posso extrair as variáveis ​​do script? Preciso saber seus valores. Simplesmente referir-se a eles como $MY_VAR1não funciona; ele está vazio.

Responder1

Se as variáveis ​​forem verdadeiramente variáveis ​​de ambiente (ou seja, foram exportadas com export) no ambiente que invoca seu script, então elasseriaestar disponível em seu script. O fato de não serem, sugere que você não os exportou ou que executou o script em um ambiente onde eles simplesmente não existem, mesmo como variáveis ​​​​de shell.

Exemplo:

$ cat script.sh
#!/bin/sh

echo "$hello"
$ sh script.sh

(uma linha de saída vazia, pois hellonão existe em lugar nenhum)

$ hello="hi there"
$ sh script.sh

(ainda apenas uma linha vazia como saída, pois helloé apenas uma variável de shell, não uma variável de ambiente)

$ export hello
$ sh script.sh
hi there

Alternativamente, para definir a variável de ambiente apenas para este script e não no ambiente de chamada:

$ hello="sorry, I'm busy" sh script.sh
sorry, I'm busy
$ env hello="this works too" sh script.sh
this works too

Responder2

Você precisa garantir a exportação das variáveis ​​de ambiente às quais deseja ter acesso em seu script antes de invocá-lo. Ou seja:

Unix> export MY_TEMP=/tmp
Unix> some_script.sh

Agora some_script.sh teria acesso a $MY_TEMP - quando você invoca um script de shell, você obtém um novo ambiente, apenas com variáveis ​​exportadas, a menos que você o "fonte" precedendo o comando do script com um ponto final (".") e um espaço e, em seguida, o nome do seu script:

Unix>  . some_script.sh  # runs in current environment

Dica de depuração: inclua próximo ao topo do seu script o setcomando para ver quais variáveis ​​seu script pode ver.

Responder3

Observe também que se você deseja que eles vivam apenas "durante a execução do script", você pode colocar as exportações deles em um arquivo e, em seguida, originar esse arquivo em seu script.

Porque quando você executa um script, ele será executado em um novo shell, desta forma essas variáveis ​​​​serão exportadas apenas naquele subshell (e seus descendentes) e não irão para o seu próprio shell, ou seja, parecerá que se você os desativa automaticamente após o término da execução do script.

Exemplo:

# config.txt
export SECRET=foobar
# prog.sh
#!/usr/bin/env sh
source ./config.txt
echo $SECRET

Agora execute:

chmod +x prog.sh
./prog.sh

e confirme se a variável SECRET não vazou para seu próprio shell:

echo $SECRET # <-- must echo a blank line

informação relacionada