Linux

在 su - 使用者中找不到導出命令

  • August 25, 2019

從 root 開始,我想用另一個 .sql 腳本執行一個 sql 腳本$USER。但我必須設置 right$ORACLE_HOME$PATHfor $USER

使用此命令,我收到錯誤***export: command not found***

su - $USER -c "export ORACLE_HOME=$ORA_HOME;export PATH=$ORA_HOME/bin:$PATH;sqlplus / as sysdba"

我的問題是:開始在 root 中執行腳本,如何為另一個使用者導出環境變數並使用該環境變數執行命令?

正如 steeldriver 評論的那樣,您的目標使用者很可能正在使用 csh 或 tcsh。如果您想確定您正在使用的 shell,請顯式呼叫它:

su - "$USER" -c \
 "/bin/ksh -c 'export ORACLE_HOME=$ORA_HOME;export PATH=$ORA_HOME/bin:$PATH;sqlplus / as sysdba'"

雖然(子)shell 將包含來自主 shell 的任何(導出)環境變數,但它不會包含來自使用者主 shell 的任何(未導出)shell 變數。

無論如何,您都不需要導出。趕緊跑:

su - $USER -c "ORACLE_HOME=$ORA_HOME;PATH=$ORA_HOME/bin:$PATH;sqlplus / as sysdba"

僅當export您需要由 shell 啟動的任何子 shell 繼承變數時才需要。在這裡,您從同一個 shell 啟動命令,因此無需export.

但是,正如評論中所指出的,如果sqlplus需要查看這些變數,那將無濟於事,只有在需要設置它們才能正確找到 sqlplus 時。如果失敗,請嘗試:

su - $USER -c "ORACLE_HOME='$ORA_HOME' PATH='$ORA_HOME/bin:$PATH' sqlplus / as sysdba"

引用自:https://unix.stackexchange.com/questions/536449