2013-03-12 2 views
0

PHP 함수 shell_exec()에서 sh 스크립트 파일을 실행하려고하는데 반환 값이 잘못 될 때마다 스크립트 파일을 실행하려고합니다. PHP shell_exec()가 올바른 상태를 반환하지 않습니다.

은 쉬 파일 내용이다 :

if [[ -z $1 ]] 
then 
     echo "svn st: NULL" 
else 
     command=$(ssh -q [email protected]_OF_THE_REMOTE_NODE "svn st $1") 
     if [[ -z $command ]] 
     then 
       test="svn st: OK" 
     else 
       test="svn st: KO" 
     fi 
     echo $test 
fi 

모든 I 쉘에서이 쉬 스크립트를 실행 시간 에코가 항상 올바른 것입니다. "$ 1"에는 확인해야하는 작업 디렉터리가 들어 있습니다.

하지만이 방법으로 동일한 스크립트를 실행하는 경우 :

$w_path = $working_path['path']; 
$com = "sh /tmp/my_script_test.sh $w_path"; 

echo "content com ".$com; 

$res = shell_exec($com); 

echo "content res ".$res; 

마지막 에코 인쇄를 항상 "일 SVN : OK", 즉 일부 $w_path에 대한 올바른 있지만, 다른 사람을 위해 완전히 uncorrect입니다! 왜? 실수를 어떻게 찾을 수 있습니까?

내가 가이드를 사용하여 문제를 해결 한 ssh 키 문제라고 생각하지 않으며 원격 서버의 비밀번호를 삽입 할 필요가 없습니다.

감사 감사

+0

당신은 PHP 스크립트가 스크립트를 실행하는 동일한 사용자에 의해 실행됩니까? 'whoami'를 sh 파일 상단에 입력하십시오. php 스크립트는 www-data 또는 apache (키 쌍을 사용하여 원격 서버에 액세스 할 수없는 사용자)로 실행됩니다. –

+0

안녕하세요, 귀하의 도움에 감사드립니다. 네, 두 번째 방법은 사용자가 "아파치"가 아닌 "루트"이지만 원격/루트 /.shh/authorized_keys에있는 로컬 서버의 var/www/.shh에 ssh 키를 넣습니다. 다른 일을해야합니까? – michoprogrammer

+0

명령을'sh -x /tmp/my_script_test.sh $ w_path'로 변경하면 모든 변수 확장을 볼 수 있습니다. – Barmar

답변

2

변경

 command=$(ssh -q [email protected]_OF_THE_REMOTE_NODE "svn st $1") 
     if [[ -z $command ]] 

 if ssh -q [email protected]_OF_THE_REMOTE_NODE "svn st $1" 

과 기억이 너무 복잡하기 때문에 무언가가 작동하지 않을 때마다 (여기서 기억하지 수있어 나는 그것을 읽었다).

관련 문제