运行 db2 时 su 和 su -c(环境变量?)之间的区别?

运行 db2 时 su 和 su -c(环境变量?)之间的区别?

当我输入以下内容时:

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>

它工作正常。

问题是,我不能使用没有 -c 的“su”,因为我将它放入 Python 脚本中,而 Python 在运行“su”时会丢失对 Bash 的提示。

我认为我的问题在某种程度上在于我的环境变量——我如何确定每种情况下我的环境变量之间的差异,更重要的是,如何在 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>"

相关内容