web-dev-qa-db-fra.com

l'exportation ne fonctionne pas dans mon script Shell

J'ai deux scripts 1.sh et 2.sh.

1.sh est le suivant:

#!/bin/sh
variable="thisisit"
export variable

2.sh est le suivant:

#!/bin/sh
echo $variable

D'après ce que j'ai lu, faire comme ça (exporter) peut accéder aux variables d'un script Shell à partir d'un autre. Mais cela ne fonctionne pas dans mes scripts. Quelqu'un peut-il m'aider? Merci d'avance.

39
Xander

Si vous exécutez vos fichiers comme sh 1.sh ou ./1.sh Ensuite, vous l'exécutez dans un sous-shell.

Si vous souhaitez que les modifications soient apportées dans votre shell actuel, vous pouvez:

. 1.sh
# OR
source 1.sh

Veuillez envisager de parcourir la documentation de référence .

"Lorsqu'un script est exécuté à l'aide de source [ou .] il s'exécute dans le shell existant, toutes les variables créées ou modifiées par le script resteront disponibles une fois le script terminé. En revanche, si le script est exécuté exactement comme filename, alors un sous-shell séparé (avec un ensemble de variables complètement distinct) serait généré pour exécuter le script. "

84
linuxeasy

export place une variable dans l'environnement Shell en cours d'exécution afin qu'elle soit passée aux processus exécutés par le script, mais pas au processus appelant le script ou à tout autre processus. Essayez d'exécuter

#!/bin/sh
FOO=bar
env | grep '^FOO='

et

#!/bin/sh
FOO=bar
export FOO
env | grep '^FOO='

pour voir l'effet de export.

Pour obtenir la variable de 1.sh à 2.sh, soit appeler 2.sh de 1.sh, ou importez 1.sh dans 2.sh:

#!/bin/sh
. ./1.sh
echo $variable
6
Fred Foo