
Necesito llamar sqlplus
con el usuario de Oracle sudo a una base de datos claramente especificada (env var ORACLE_SID
) mediante un comando de una línea. La forma habitual de hacerlo consta de 2 pasos:
$ sudo -u oracle -i
$ ORACLE_SID=DBNAME sqlplus / as sysdba
Pero necesito hacerlo en una línea (para ahorrar tiempo, razonablemente). Intento hacerlo simplemente así:
$ sudo -u oracle -i ORACLE_SID=DBNAME sqlplus / as sysdba
Pero parece que sqlplus
no ve el cambio de ORACLE_SID
env var y se conecta a la base de datos predeterminada. Además, no puedo excluir -i
la opción sudo porque necesito asegurarme de que todas las demás variables de entorno se inicialicen perfectamente.
¿Cómo puedo ejecutar una aplicación con sudo y una variable de entorno personalizada en mi caso?
Respuesta1
Pruebe el siguiente comando:
sudo -i su - oracle -c 'ORACLE_SID=DBNAME && sqlplus'
Explicación:
"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.
Respuesta2
La mejor manera de resolver la pregunta es utilizar el siguiente comando:
sudo -u oracle -i sh -c "ORACLE_SID=DBNAME sqlplus / as sysdba"
Y si queremos pasar el script SQL directamente en una línea:
sudo -u oracle -i sh -c "ORACLE_SID=DBNAME sqlplus / as sysdba" <<-EOF
SELECT 1 FROM DUAL;
EOF