web-dev-qa-db-fra.com

importer des variables d'environnement dans un script bash

J'ai défini certaines variables d'environnement dans un terminal, puis j'exécute mon script. Comment puis-je extraire les variables du script? J'ai besoin de connaître leurs valeurs. En les désignant simplement par $MY_VAR1 ne fonctionne pas; c'est vide.

3
Mark

Si les variables sont vraiment des variables d'environnement (c'est-à-dire qu'elles ont été exportées avec export) dans l'environnement qui appelle votre script, alors elles seraient disponibles dans votre script. Qu'ils ne le soient pas suggère que vous ne les avez pas exportés, ou que vous exécutez le script à partir d'un environnement où ils n'existent tout simplement pas même en tant que variables Shell.

Exemple:

$ cat script.sh
#!/bin/sh

echo "$hello"
$ sh script.sh

(une ligne de sortie vide puisque hello n'existe nulle part)

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

(toujours seulement une ligne vide en sortie comme hello est seulement une variable Shell, pas une variable d'environnement)

$ export hello
$ sh script.sh
hi there

Alternativement, pour définir la variable d'environnement uniquement pour ce script et non dans l'environnement appelant:

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

Vous devez vous assurer d'exporter les variables d'environnement auxquelles vous souhaitez avoir accès dans votre script avant d'appeler le script. C'EST À DIRE:

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

Maintenant, some_script.sh aurait accès à $ MY_TEMP - lorsque vous appelez un script Shell, vous obtenez un nouvel environnement, avec uniquement des variables exportées, sauf si vous le "sourcez" en précédant la commande de script avec un point (".") Et un espace, puis le nom de votre script:

Unix>  . some_script.sh  # runs in current environment

Astuce de débogage: incluez vers le haut de votre script la commande set pour voir quelles variables votre script peut voir.

3
Mark Stewart