Je suis en train d'écrire le script suivant:Pourquoi parfois une connexion DB2 dans un sous-shell est pas identifié
#!/bin/bash
db2 connect to andres
a=$(db2 connect)
echo $a
b=$(db2 connect && echo $?)
echo $b
c=$(db2 connect ; echo $?)
echo $c
d=$(db2 connect)
echo $d
Ce que je fais est d'exécuter des commandes de multiples à l'intérieur d'un sous-shell en utilisant la connexion établie en cours; cependant, la connexion n'est identifiée comme connectée que si une commande db2 est émise. Si j'utilise un tube ou plusieurs commandes dans le sous-shell, la connexion n'est pas identifiée. Pourquoi?
$ ./test
Database Connection Information
Database server = DB2/LINUXX8664 10.5.5
SQL authorization ID = DB2INST1
Local database alias = ANDRES
Database Connection Information Database server = DB2/LINUXX8664 10.5.5 SQL authorization ID = DB2INST1 Local database alias = ANDRES
SQL1024N A database connection does not exist. SQLSTATE=08003
SQL1024N A database connection does not exist. SQLSTATE=08003 4
Database Connection Information Database server = DB2/LINUXX8664 10.5.5 SQL authorization ID = DB2INST1 Local database alias = ANDRES
Comme vous pouvez le voir, la connexion est toujours active après la dernière instruction.
Essayez de double citant votre variable d'écho (par exemple 'echo" $ a "') ... –
@ I'L'I Cela ne résout pas le problème de ne pas détecter la connexion lorsque deux commandes sont émises dans le sous-shell. – AngocA
Parce que Bash optimise une seule commande entre parenthèses à _not_ dans un sous-shell. Vous pouvez facilement vérifier cela en comparant '(ps -f) | grep 'et' (ps -f | grep ) ' –
mustaccio