【发布时间】:2016-03-28 06:07:07
【问题描述】:
我正在尝试解决一个问题,在我看来,您无法将打开的 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
现在,我真正的问题是 db2 连接在 subshell 中不可用:
我累了:
. my_driver.sh
没用
如果我从命令行手动执行:
source foo.sh
我手动设置$params:
baz $params
bar $params
然后它确实有效!所以看起来doit 或其他东西的行为就像bar 和baz 是从一个子shell 执行的。
如果我能以某种方式弄清楚如何将 db2 开放连接传递给 subshell,我会很高兴。
否则,在我看来,这些 shell 函数在子 shell 中运行。有办法解决吗?
【问题讨论】:
-
我认为答案对你来说是显而易见的。是的,它在一个子shell中!您可以通过尝试打印环境变量来轻松测试。
-
是的,它是.. 但是可以我在子shell中运行
bar或baz不? -
在您的代码中,我看不到
baz或bar在子shell 中运行的任何可能性。可能他们自己在子 shell 中运行 db2 命令? -
感谢@dekkard 你让我思考 :) 所以现在,我仍然不确定
bar或baz是否确实在子shell 中被调用,但是我通过在{curlies}中环绕我的db2调用解决了我的问题! -
最后一条评论只是错误,嗯,我怎么能只删除评论呢?