Je veux obtenir une variable d'un autre script, comme illustré dans cette question sur le dépassement de capacité de pile:
Comment référencer un fichier pour les variables dans un script bash
Cependant, la réponse utilise la commande source
qui est uniquement disponible dans bash
name__. Je veux le faire de manière portable.
J'ai aussi essayé
a.sh
export VAR="foo"
echo "executing a"
b.sh
#!/bin/sh
./a.sh
echo $VAR
Mais bien sûr, cela ne fonctionne pas non plus. Comment faire ça?
Tout d’abord, sachez que var
et VAR
sont des variables différentes.
Pour répondre à votre question, la commande .
n'est pas spécifique à bash:
# a.sh
num=42
# b.sh
. ./a.sh
echo $num
Les variables dans "a" ne doivent pas être exportées.
http://www.gnu.org/software/bash/manual/bashref.html#Bourne-Shell-Builtins
Les variables d'environnement ne sont héritées que de parent à enfant et non l'inverse. Dans votre exemple, b.sh appelle a.sh. Ainsi, a est exécuté en tant qu'enfant de b. Quand a.sh exporte var, il ne sera pas vu par b.sh. Modifiez la logique pour que le processus parent exporte la variable, par exemple.
a.sh:
echo In a.sh...
VAR="test"
export VAR
./b.sh
b.sh:
echo In b.sh...
echo $VAR