루트부터 시작하여 다른 것을 사용하고 싶습니다 $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"