Linux
使用 sudo 和自定義環境變數呼叫應用程序
我需要與 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_SID
env var 的變化並連接到預設數據庫。我也不能排除-i
sudo 選項,因為我需要確保所有其他環境變數都已完美初始化。在我的情況下,如何使用 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.