Vous avez essentiellement deux options:
- Faire de la variable une variable d'environnement (
export TESTVARIABLE
) avant l'exécution de la 2ème script.
- Source de la 2ème script, c'est à dire
. test2.sh
et il sera exécuté dans la même coquille. Ce serait vous permettent de partager des variables plus complexes comme des tableaux facilement, mais signifie également que l'autre script pourrait modifier les variables dans la source de la coquille.
Mise à JOUR:
Pour utiliser export
définir une variable d'environnement, vous pouvez soit utiliser une variable existante:
A=10
# ...
export A
Cela devrait fonctionner dans les deux bash
et sh
. bash
permet également d'être combinées comme suit:
export A=10
Cela fonctionne aussi dans mon sh
( bash
, vous pouvez utiliser echo $SHELL
le vérifier). Mais je ne crois pas que cela est garanti de fonctionner dans tous sh
, donc il vaut mieux jouer la sécurité et de les séparer.
Toute variable de l'exportation de cette façon, il sera visible dans les scripts que vous exécuter, par exemple:
un.sh:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Alors:
$ ./a.sh
The message is: hello
Le fait que ces deux scripts shell est également à quelques accessoires. Les variables d'environnement peuvent être transmises à des processus à exécuter, par exemple, si nous avons utilisé python au lieu de cela, il pourrait ressembler à:
un.sh:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.py
b.py:
#!/usr/bin/python
import os
print 'The message is:', os.environ['MESSAGE']
Sourcing:
Au lieu de cela, nous pourrions source comme ceci:
un.sh:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Alors:
$ ./a.sh
The message is: hello
Cette plus ou moins "importations" le contenu de b.sh
directement et l'exécute dans la même coquille. Notez que nous n'avons pas d'exporter la variable d'y accéder. Cette implicitement les actions de toutes les variables que vous avez, ainsi que l'une permet à l'autre de script pour ajouter/supprimer/modifier des variables du shell. Bien sûr, dans ce modèle à la fois vos scripts doivent être de la même langue (sh
ou bash
). Pour donner un exemple de la façon dont nous pourrions passer des messages en arrière et en avant:
un.sh:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
echo "[A] The message is: $MESSAGE"
b.sh:
#!/bin/sh
echo "[B] The message is: $MESSAGE"
MESSAGE="goodbye"
Alors:
$ ./a.sh
[B] The message is: hello
[A] The message is: goodbye
Ceci fonctionne aussi bien en bash
. Il rend également facile de partager des données plus complexes que vous ne pouvez exprimer comme une variable d'environnement (au moins sans soulèvement d'objets lourds sur votre partie), comme des tableaux ou des tableaux associatifs.