App mit sudo und benutzerdefinierter Umgebungsvariable aufrufen

App mit sudo und benutzerdefinierter Umgebungsvariable aufrufen

Ich muss sqlplusmit dem Oracle-Benutzer sudo eine eindeutig angegebene Datenbank (Umgebungsvariable ORACLE_SID) mit einem Einzeilenbefehl aufrufen. Die übliche Vorgehensweise besteht aus zwei Schritten:

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

Aber ich muss es in einer Zeile machen (um Zeit zu sparen, zumindest einigermaßen). Ich versuche es ganz einfach so:

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

Aber es scheint, dass sqlplusdie Änderung der Umgebungsvariable nicht erkannt wird ORACLE_SIDund eine Verbindung zur Standarddatenbank hergestellt wird. Außerdem kann ich -idie Sudo-Option nicht ausschließen, da ich sicher sein muss, dass alle anderen Umgebungsvariablen einwandfrei initialisiert wurden.

Wie kann ich in meinem Fall eine Anwendung mit sudo und benutzerdefinierter Umgebungsvariable ausführen?

Antwort1

Versuchen Sie den folgenden Befehl:

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

Erläuterung:

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

Antwort2

Die beste Möglichkeit zum Lösen dieses Problems besteht in der Verwendung des folgenden Befehls:

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

Und wenn wir das SQL-Skript direkt in einer Zeile übergeben möchten:

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

verwandte Informationen