我在 CentOS 服务器上通过 SSH 进入远程服务器时尝试设置环境变量。我以 root 身份运行命令,但需要它以 Oracle 用户身份运行命令。我在网站上找到了一些东西,但似乎都不起作用。
ssh $SERVER su $ORACLE_USER 'ORACLE_HOME="/u01/app/oracle/product/11.2.0"; PATH="/u01/app/oracle/product/11.2.0/Opatch:$PATH'; opatch lsiinventory'
有人可以帮我吗?
答案1
在大多数 shell 中,变量不会自动成为环境的一部分,除非它们出口那里(用 Bourne shell 术语来说)。对于 sh/bash,使用:
ssh $SERVER "su $ORACLE_USER -c 'export ORACLE_HOME=\"/u01/app/oracle/product/11.2.0\";
export PATH=\"/u01/app/oracle/product/11.2.0/Opatch:\$PATH\";
opatch lsiinventory'"
(在 bash 中,更改现有的环境变量(例如 $PATH)将自动重新导出它,但这不能保证在所有 shell 中都是如此。)
另请注意ssh
才不是保留参数分离并将所有内容作为单个参数发送(最终将其提供给/bin/sh -c "…"
)。为了避免混淆,最好首先只将单个命令参数传递给 ssh。
答案2
为什么不直接在远端系统上创建一个小型的 shell 脚本启动器并运行它呢:
#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/11.2.0
exec $ORACLE_HOME/Opatch/opatch lsiinventory
将其保存到名为“oplauncher”chmod 755 的文件中,然后使用 ssh 登录并运行它。