Chame o aplicativo com sudo e variável de ambiente personalizada

Chame o aplicativo com sudo e variável de ambiente personalizada

Preciso chamar sqlpluscom o usuário Oracle Sudo para um banco de dados claramente especificado (env var ORACLE_SID) por um comando de linha. A maneira usual de fazer isso consiste em 2 etapas:

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

Mas preciso fazer isso em uma linha (para economizar tempo, razoavelmente). Eu tento fazer simplesmente assim:

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

Mas parece que sqlplusnão vê mudança de ORACLE_SIDenv var e se conecta ao banco de dados padrão. Além disso, não posso excluir -ia opção sudo porque preciso ter certeza de que todas as outras variáveis ​​de ambiente foram inicializadas perfeitamente.

Como posso executar o aplicativo com sudo e variável de ambiente personalizada no meu caso?

Responder1

Experimente o seguinte comando:

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

Explicação:

"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.

Responder2

A melhor maneira de resolver a questão é usar o seguinte comando:

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

E se quisermos passar o script sql diretamente em uma linha:

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

informação relacionada