Vous avez essentiellement deux options:
- Faites de la variable une variable d'environnement (
export TESTVARIABLE
) avant d'exécuter le 2ème script.
- Source le 2ème script, c'est-à
. test2.sh
- dire et il fonctionnera dans le même shell. Cela vous permettrait de partager facilement des variables plus complexes telles que des tableaux, mais cela signifie également que l'autre script pourrait modifier des variables dans le shell source.
METTRE À JOUR:
Pour utiliser export
pour définir une variable d'environnement, vous pouvez soit utiliser une variable existante:
A=10
# ...
export A
Cela devrait fonctionner à la fois dans bash
et sh
. bash
permet également de le combiner comme ceci:
export A=10
Cela fonctionne également dans my sh
(ce qui se trouve être bash
, vous pouvez utiliser echo $SHELL
pour vérifier). Mais je ne pense pas que cela fonctionne dans tous sh
, alors mieux vaut jouer la sécurité et les séparer.
Toute variable que vous exportez de cette manière sera visible dans les scripts que vous exécutez, par exemple:
cendre:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Ensuite:
$ ./a.sh
The message is: hello
Le fait que ce soient tous les deux des scripts shell est également accessoire. Les variables d'environnement peuvent être passées à n'importe quel processus que vous exécutez, par exemple si nous avons utilisé python à la place, cela pourrait ressembler à:
cendre:
#!/bin/sh
MESSAGE="hello"
export MESSAGE
./b.py
b.py:
#!/usr/bin/python
import os
print 'The message is:', os.environ['MESSAGE']
Approvisionnement:
Au lieu de cela, nous pourrions nous approvisionner comme ceci:
cendre:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
b.sh:
#!/bin/sh
echo "The message is: $MESSAGE"
Ensuite:
$ ./a.sh
The message is: hello
Cela "importe" plus ou moins b.sh
directement le contenu de et l'exécute dans le même shell . Notez que nous n'avons pas eu à exporter la variable pour y accéder. Cela partage implicitement toutes les variables que vous avez, ainsi que permet à l'autre script d'ajouter / supprimer / modifier des variables dans le shell. Bien sûr, dans ce modèle, vos deux scripts doivent être dans la même langue ( sh
ou bash
). Pour donner un exemple de la façon dont nous pourrions passer des messages dans les deux sens:
cendre:
#!/bin/sh
MESSAGE="hello"
. ./b.sh
echo "[A] The message is: $MESSAGE"
b.sh:
#!/bin/sh
echo "[B] The message is: $MESSAGE"
MESSAGE="goodbye"
Ensuite:
$ ./a.sh
[B] The message is: hello
[A] The message is: goodbye
Cela fonctionne aussi bien dans bash
. Cela facilite également le partage de données plus complexes que vous ne pourriez pas exprimer en tant que variable d'environnement (du moins sans une lourde charge de votre part), comme des tableaux ou des tableaux associatifs.