0
我写了下面的脚本:为什么有时在子shell一个DB2连接不识别
#!/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
什么我做的是通过使用当前建立的连接来执行一个子shell里倍数命令;但是,只有在发出db2命令时才将连接标识为连接。如果我在子shell中使用管道或多个命令,则不会识别连接。为什么?
$ ./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
正如你所看到的,连接仍然是最后的语句之后活跃。
尝试双引号的回声变量(例如'echo'$ a“')... –
@ I'L'I这并不解决在子外壳中发出两个命令时未检测到连接的问题。 – AngocA
因为Bash优化了括号内的单个命令,所以不会在子shell中运行。你可以通过比较'(ps -f)|来轻松验证grep'和'(ps -f | grep )' –
mustaccio