Разница между su и su -c (переменными окружения?) При запуске db2?
Когда я набираю это:
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?
1 ответ
Решение
Вы можете найти разницу между средами, подобными этой:
su <user>
printenv
su <user> -c "printenv"
Вы можете изменить среду во втором случае следующим образом:
su <user> -c "export <varname>=<varvalue>; <more commands...>"
Теперь для конкретной проблемы, которую я имел, я обнаружил, что мне нужна переменная DB2INSTANCE
задавать. Так что это сработало для меня:
su <user> -c "export DB2INSTANCE=<user>; /home/<user>/sqllib/bin/db2 catalog tcpip node <dbName> remote <ip> server <port>"