我需要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
环境变量的变化并连接到默认数据库。另外,我无法排除-i
sudo 选项,因为我需要确保所有其他环境变量都已完美初始化。
在我的情况下,如何使用 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