2014-02-12 3 views
2

init 스크립트에서 다른 사용자 (이 경우에는 tomcat의 catalina.sh)와 다른 스크립트를 호출하고 추가 매개 변수를 전달하고 싶습니다.init 스크립트에 매개 변수가있는 bash su

은 이런 식으로 뭔가를 시도 :

if [ $USER == "root" ] 
then 
    CMD="/bin/su ${TOMCAT_USER} -c" 
fi 

$CMD $CATALINA_HOME/bin/catalina.sh stop 20 -force 

그러나,이 '정지'와 다른 매개 변수는 개별 파일로서가 아니라 스크립트에 매개 변수로 취급로 실패하고 그 돈 분명 파일 ' 존재하지 않습니다. "$ (printf())"를 사용하여 필요한 명령을 구성하여 해결하려고 노력했지만 작동중인 솔루션을 찾을 수 없었습니다. 스크립트에 추가 매개 변수를 전달할 수있는 아이디어는 있습니까?

편집 :

경우에 더 많은 컨텍스트를 제공하는 현재의 사용자가 이미 필요한 사용자입니다.

if [ $USER == "root" ] 
then 
    CMD="/bin/su ${TOMCAT_USER} -c '" 
    PST="'" 
elif [ $USER == "${TOMCAT_USER}" ] 
then 
    CMD='' 
    PST='' 
else 
    exit 1 
fi 

bash -c "$CMD$CATALINA_HOME/bin/catalina.sh stop 20 -force$PST" 
+0

우리는 catalina.sh – suspectus

+0

@suspectus [catalina.sh (https://svn.apache.org/repos/asf/tomcat/trunk/bin/catalina.sh) –

답변

3

를 사용하여 명령 줄 실행하려면 다음 두 가지 방법 중 하나를 :

bash -c "$CMD '$CATALINA_HOME/bin/catalina.sh stop 20 -force'" 

또는

eval "$CMD '$CATALINA_HOME/bin/catalina.sh stop 20 -force'" 
+0

를 볼 필요가 받아들이는 것으로 표시하는 것이 좋습니다. – anubhava

+0

유감 스럽지만 SLES에서 작동하지 않습니다. 두 번째 응답과 첫 번째 응답에 대해 'env :/bin/su tomcat /srv/tomcat7/lastest/bin/catalina.sh stop 20 -force No such file or directory' '/ bin/su : 잘못된 옵션 - o' –

+0

이상한,'eval '$ CMD $ CATALINA_HOME/bin/catalina.sh stop 20 -force "work? – anubhava

0

가 인용 여분 방지하려면를이 문제를 해결할 것으로 보인다 못생긴 해결 방법입니다 문제는 단순히 함수에서 이것을 감쌀 수 있습니다 :

몇 노트 :

  • "${USER-root}" 코드가 어떤 이유로 USER이 비어 또는 설정되지 않은 경우 실패하지 않는다는 점을 보장합니다. 그렇지 않으면 루트 사용자가 unset USER을 실행했을 때 우연히 올바른 사용자와 함께 실행하려고 시도합니다.
  • "[email protected]"은 적절히 인용 된 모든 인수로 확장되므로 매개 변수를 다시 사용할 수있는 안전한 방법으로 간주됩니다. 그 다음 일 경우
+0

불행하게도 SLES'/ bin/su : 잘못된 옵션 - o'에 오류가 발생합니다. –

+0

@codeySmurf'set -x'를 실행 해 실제로 실행 중인지 확인하십시오. – l0b0

+0

'set -x'를 run_as_tomcat_user() 함수의 시작 부분에 추가했습니다. 이것은 출력물입니다. http://pastebin.com/kGfyzsiV –