Llame a la aplicación con sudo y variable de entorno personalizada

Llame a la aplicación con sudo y variable de entorno personalizada

Necesito llamar sqlpluscon 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 sqlplusno ve el cambio de ORACLE_SIDenv var y se conecta a la base de datos predeterminada. Además, no puedo excluir -ila 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

información relacionada