Bonjour,

J'utilise un script qui appelle un deuxième script qui initialise des variables que je veux utiliser dans mon premier script :
  • Soit une variable récupérée via un echo
  • Soit plusieurs variables récupérées par un export


Jusqu'à présent c'était soit l'un ou l'autre donc ça ne pose pas de problème :
  • on utilise VAR=$(./script2.sh) pour récupérée la donnée envoyée par echo
  • On utilise les variables initialisées par l'appel du script avec le point pour ne pas créer un autre shel : . ./script2.sh


Désormais j'aimerais utiliser les deux en même temps sans modifier le deuxième script. Logiquement, il me suffit d'utiliser VAR=$(. ./script2.sh) mais les variables initialisées par les export sont vides dans le premier script.

Voici un exemple, le quatrième cas ne fonctionne pas comme prévu. Y a-t-il une solution sans modifier le deuxième script (sous-shell.sh) ?

test.sh :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/bin/bash
# Database INFO
 
VAR_EXPORT=
VAR_ECHO=
echo Appel 1
 
./sous-shell.sh
 
echo VAR_EXPORT=$VAR_EXPORT
echo VAR_ECHO=$VAR_ECHO
 
VAR_EXPORT=
VAR_ECHO=
echo Appel 2
 
. ./sous-shell.sh
 
echo VAR_EXPORT=$VAR_EXPORT
echo VAR_ECHO=$VAR_ECHO
 
VAR_EXPORT=
VAR_ECHO=
echo Appel 3
 
VAR_ECHO=$(./sous-shell.sh)
 
echo VAR_EXPORT=$VAR_EXPORT
echo VAR_ECHO=$VAR_ECHO
 
VAR_EXPORT=
VAR_ECHO=
echo Appel 4
 
VAR_ECHO=$(. ./sous-shell.sh)
 
echo VAR_EXPORT=$VAR_EXPORT
echo VAR_ECHO=$VAR_ECHO
sous-shell.sh
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
#!/bin/bash
# Database INFO
export VAR_EXPORT=VAR_EXPORT
echo VAR_ECHO
Résultat :

Appel 1
VAR_ECHO
VAR_EXPORT=
VAR_ECHO=
Appel 2
VAR_ECHO
VAR_EXPORT=VAR_EXPORT
VAR_ECHO=
Appel 3
VAR_EXPORT=
VAR_ECHO=VAR_ECHO
Appel 4
VAR_EXPORT=
VAR_ECHO=VAR_ECHO

Commentaire :
Appel 1 : OK, export ne sont pas utilisables vu qu'on a ouvert un sous shell
Appel 2 : OK, export utilisables vu qu'on reste dans le même shell
Appel 3 : OK, on stocke la donnée renvoyée par echo dans la variable et l'export ne fonctionne pas car on a ouvert un sous-shell
Appel 4 : KO, on stocke la donnée renvoyée par echo dans la variable mais l'export ne fonctionne pas comme souhaité