Я пытаюсь обойти проблему, мне кажется, что нельзя передать открытое соединение db2 в подоболочку.
Моя кодовая организация выглядит следующим образом:
Сценарий драйвера (в 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 недоступно в подоболочке:
Я устал:
. my_driver.sh
Не помогает
Если я сделаю это вручную из командной строки:
source foo.sh
И выставил $params
вручную:
baz $params
bar $params
Тогда это действительно работает! Таким образом, кажется, что doit
или что-то еще действует так, как если бы bar
и baz
выполнялись из подоболочки.
Я был бы в восторге, если бы я мог каким-то образом выяснить, как передать открытое соединение db2 в подоболочку, было бы лучше всего.
В противном случае мне кажется, что эти функции оболочки выполняются в подоболочке. Есть ли способ обойти это?
bar
илиbaz
нет в подоболочке? - person lzc   schedule 22.03.2016baz
илиbar
выполнялись в подоболочке. Наверное, они сами в подоболочке запускают команды db2? - person dekkard   schedule 22.03.2016bar
илиbaz
вызываются в подоболочке, но я решил свою проблему, обернув своиdb2
вызовы в{
кудри}
! - person lzc   schedule 22.03.2016