J'essaie de contourner un problème me semble que vous ne pouvez pas passer la connexion db2 ouverte à un sous-shell.Une fonction Shell s'exécute dans un sous-shell
Mon organisation de code est le suivant:
script pilote (en my_driver.sh
)
# foo.sh defines baz() bar(), which use a db2 connection
# Also the "$param_file" is set in foo.sh!
source foo.sh
db2 "connect to $dbName USER $dbUser using $dbPass"
function doit
{
cat $param_file | while read params
do
baz $params
bar $params
done
}
doit
J'ai simplifié mon code, mais assez au-dessus est donner l'idée. Je commence ci-dessus:
my_driver.sh
Maintenant, mon vrai problème est que la connexion db2 n'est pas disponible en sous-shell:
Je fatigué:
. my_driver.sh
ne pas aider
Si je le fais manuellement à partir de la ligne de commande:
source foo.sh
Je tournai $params
manuellement:
baz $params
bar $params
Ensuite, il fonctionne! Il semble donc que doit
ou autre chose agit comme si bar
et baz
sont exécutés à partir d'un sous-shell.
Je serais ravi si je peux comprendre comment passer db2 connexion ouverte à sous-shell serait le mieux.
Sinon, ces fonctions shell me semblent fonctionner dans un sous-shell. Y a-t-il un moyen de contourner cela?
Je pense que la réponse est évidente pour vous. Oui c'est dans un sous-shell! vous pouvez facilement tester ceci en essayant d'imprimer des variables d'environnement. – raam86
Oui, c'est .. mais ** peut ** Je cours 'bar' ou' baz' * pas * dans un sous-shell? – lzc
Dans votre code, je ne vois aucune possibilité que '' '' baz''' ou '' '' '' '' bar''' s'exécute dans un sous-shell. Probablement ils exécutent eux-mêmes des commandes db2 dans un sous-shell? – dekkard