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