Linux

使用 sudo 和自定義環境變數呼叫應用程序

  • March 16, 2018

我需要與 oracle 使用者 sudo 一起呼叫,以通過一行命令sqlplus明確指定 DB (env var )。ORACLE_SID通常的方法包括兩個步驟:

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

但我需要一行完成(合理地節省時間)。我嘗試像這樣簡單地做到這一點:

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

但似乎sqlplus沒有看到ORACLE_SIDenv var 的變化並連接到預設數據庫。我也不能排除-isudo 選項,因為我需要確保所有其他環境變數都已完美初始化。

在我的情況下,如何使用 sudo 和自定義環境變數執行應用程序?

解決問題的最佳方法是使用以下命令:

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

嘗試以下命令:

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.

引用自:https://serverfault.com/questions/899494