su - ユーザーからエクスポートコマンドが見つかりません。

su - ユーザーからエクスポートコマンドが見つかりません。

ルートから始めて別のものを使いたいです$USER。しかし、正しい$ORACLE_HOME合計$PATH$USER

このコマンドを使用するとエラーが発生します。export: command not found

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

私の質問は、ルートディレクトリでスクリプトの実行を開始するには、どのように他のユーザーの環境変数をエクスポートし、その環境変数を使用してコマンドを実行しますか?

答え1

Steeldriverが述べたように、ターゲットユーザーはおそらくcshまたはtcshを使用しています。使用しているシェルを確認するには、明示的に呼び出します。

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

(サブ)シェルには、デフォルトシェルから(エクスポートされた)環境変数が含まれていますが、ユーザーのデフォルトシェルから(エクスポートされていない)シェル変数は含まれません。

答え2

とにかくエクスポートする必要はありません。速く走る:

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

exportこれは、変数を継承するためにシェルによって開始されたサブシェルが必要な場合にのみ必要です。ここでは同じシェルでコマンドを実行しますexport

sqlplusただし、コメントで指摘したように、sqlplusを正しく見つけるために変数を設定する必要がある場合にのみこれらの変数を確認する必要がある場合は、役に立ちません。失敗した場合は、以下を試してください。

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

関連情報