Разница между su и su -c (переменными среды?) При запуске db2?

2999
ArtOfWarfare

Когда я набираю это:

su <user> -c "/home/<user>/sqllib/bin/db2 catalog tcpip node <dbName> remote <ip> server <port>" 

Я получаю это сообщение об ошибке:

SQL10007N Message "-1390" could not be retrieved. Reason code: "3". 

Но когда я делаю это:

su <user> /home/<user>/sqllib/bin/db2 catalog tcpip node <dbName> remote <ip> server <port> 

Работает нормально.

Проблема в том, что я не могу использовать «su» без -c, потому что я помещаю это в скрипт Python, и Python теряет приглашение Bash, когда запускается «su».

Я думаю, что моя проблема как-то связана с моими переменными среды - как бы я определил разницу между переменными среды в каждом случае и, что более важно, как я могу исправить их в случае su -c?

0

1 ответ на вопрос

1
ArtOfWarfare

You can find the difference between the environments like this:

su <user> printenv su <user> -c "printenv" 

You can modify the environment in the second case like this:

su <user> -c "export <varname>=<varvalue>; <more commands...>" 

Now for the specific problem I was having, I discovered that I needed the variable DB2INSTANCE set. So this worked for me:

su <user> -c "export DB2INSTANCE=<user>; /home/<user>/sqllib/bin/db2 catalog tcpip node <dbName> remote <ip> server <port>"