2009-12-10 9 views
0

J'ai deux scripts parent.sh et child.sh. Il y a une variable dans parent.sh qui doit être accessible par le processus fils. Je l'ai réalisé en exportant la variable dans le script parent et la variable est disponible pour le processus enfant?Script de shell parent et enfant Problème

Est-il possible que l'enfant puisse modifier la valeur de la variable d'exportation définie dans le shell parent?

Parent.sh

#!/bin/bash 
export g_var=2 
./child.sh 

child.sh

#!/bin/bash 
g_var=`expr $g_var + 1 ` #This modification is available in child shell only. 

Répondre

4

La plupart des shells supportent le source intégré, qui exécute un script dans le shell actuel plutôt que d'en créer un nouveau. En bash et quelques autres, le command . est équivalent à source. Je ne l'ai pas lu, mais la norme shell POSIX peut exiger que les deux soient équivalents. Essayez:

#!/bin/bash 
export g_var=2 
. ./child.sh 

"enfant.sh" est le même que votre exemple.

0

Non (en supposant que vous voulez dire que vous avez besoin du changement propogating retour au parent). Vous devrez mettre en œuvre une forme de communication IPC (communication inter-processus) de quelque manière que ce soit pour communiquer ce changement.

(Un moyen simple serait pour l'enfant d'écrire un petit script shell contenant la modification, et pour que le parent source ce script lorsque le processus enfant se termine).

+0

Donnez-moi plus de détails sur cette implémentation –

-1

Utiliser la commande ci-dessous dans le fichier enfant - Ceci va exporter toute la variable vers le fichier temporaire fichier_envion printenv | sed 's/^/export /; s/=/= \ "/; s/$/\" /'> env_file

puis dans le fichier parent après avoir appelé l'utilisation du fichier enfant en dessous de commande

. /child.sh . env_file