私は問題を回避しようとしていますが、あなたはサブシェルにオープンdb2接続を渡すことはできません。Shell関数はサブシェルで実行されますか
次のように私のコードの組織は次のとおりです。(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
私は私のコードを簡素化しましたが、上記のアイデアを与えるに十分です。私は上記を開始:私は疲れて
:
. my_driver.sh
は
を助けないmy_driver.sh
今、私の本当の問題は、DB2接続がサブシェルでは利用できないということです
コマンドラインから手動で実行する場合:
source foo.sh
そして、私は手動で$params
を設定します。
baz $params
bar $params
そして、それは動作しません!だから、doit
などが、サブシェルからbar
とbaz
が実行されたように振る舞うようです。
私はどうにかして、db2をサブシェルに接続する方法を理解することができれば、私は喜ぶでしょう。
そうしなければ、これらのシェル関数は私がサブシェルで動作するように思えます。その周りに道がありますか?
私は答えがあなたには明らかだと思います。はい、それはサブシェルにあります!環境変数を出力しようとすることで簡単にテストできます。 – raam86
はい、それは可能ですが** **私は 'bar'または' baz' *を*サブシェル内で実行していますか? – lzc
あなたのコードでは、 '' baz''または '' bar''がサブシェルで動く可能性はありません。おそらく彼ら自身がサブシェルでdb2コマンドを実行しますか? – dekkard