使用 sudo 和自定义环境变量调用应用程序

使用 sudo 和自定义环境变量调用应用程序

我需要sqlplus使用 oracle 用户 sudo 调用一行命令明确指定的数据库(环境变量ORACLE_SID)。通常的做法包括两个步骤:

$ sudo -u oracle -i
$ ORACLE_SID=DBNAME sqlplus / as sysdba

但我需要在一行中完成(以合理地节省时间)。我尝试像这样简单地完成它:

$ sudo -u oracle -i ORACLE_SID=DBNAME sqlplus / as sysdba

但似乎sqlplus没有看到ORACLE_SID环境变量的变化并连接到默认数据库。另外,我无法排除-isudo 选项,因为我需要确保所有其他环境变量都已完美初始化。

在我的情况下,如何使用 sudo 和自定义环境变量运行应用程序?

答案1

尝试以下命令:

sudo -i su - oracle -c 'ORACLE_SID=DBNAME && sqlplus'

解释:

"sudo -i" will take care of the environment variables.
"su - user" will consider the user's environment variables
"-c" -> the command you wish to issue.

答案2

解决问题的最佳方法是使用以下命令:

sudo -u oracle -i sh -c "ORACLE_SID=DBNAME sqlplus / as sysdba"

如果我们想直接在一行中传递sql脚本:

sudo -u oracle -i sh -c "ORACLE_SID=DBNAME sqlplus / as sysdba" <<-EOF
  SELECT 1 FROM DUAL;
EOF

相关内容