CMS Drupal에서 사용하는 drush라는 PHP/명령줄 도구를 통해 원격 웹 호스트에 연결하는 동료가 있습니다.
Drush는 ssh를 통해 원격 호스트에 연결하지만 명령을 실행하면 bash가 특정 파일을 구문 분석하려고 할 때 오류가 발생합니다. 그러나 어떤 파일에 구문 오류가 있는지는 알려주지 않습니다.
Begin redispatch via drush_invoke_process(). [2.01 sec, 6.87 MB] [notice]
Backend invoke: ssh -p 2222 -o "AddressFamily inet" [command]
[email protected]
'drush --debug --verbose --uri=myremotehost.com
--db-url='\''mysql://host:myremotehost.com:11297/database'\''
cache-rebuild 2>&1' 2>&1 [2.01 sec, 6.88 MB]
Calling proc_open(ssh -p 2222 -o "AddressFamily inet" [email protected] 'drush --debug --verbose --uri=mysite.com --db-url='\''mysql://host:myremotehost.com:11297/database'\'' cache-rebuild 2>&1' 2>&1);
/bin/sh: -c: line 0: unexpected EOF while looking for matching `''
/bin/sh: -c: line 1: syntax error: unexpected end of file
End redispatch via drush_invoke_process(). [5.36 sec, 6.88 MB] [notice]
쉘이 정상적으로 시작되고 일반적인 GNU 유틸리티 명령을 실행할 수 있으므로 .bashrc
쉘이나 다른 도트 파일에 오류가 없습니다.
문제 해결 조치로 drush 명령(셸과 PHP 스크립트의 조합)을 다시 설치했습니다. 이를 사용하여 원격 호스트에 연결하는 명령을 제외한 다양한 명령을 실행할 수 있습니다.
오류가 발생한 위치 추적을 어떻게 시작합니까?
GNU bash, version 4.4.12(1)-release (x86_64-pc-msys)
Windows 7에서는 git-bash를 사용합니다.
편집하다
위에 붙여넣은 출력에서 자세한 정보를 얻기 위해 몇 가지 자세한 디버그 스위치를 사용했습니다.
방금 drush alises 파일을 다시 다운로드하고 스위치 없이 명령을 다시 실행했는데 이것이 우리가 얻은 것입니다.
$ drush @mysite status
/bin/sh: -c: line 0: unexpected EOF while looking for matching `''
/bin/sh: -c: line 1: syntax error: unexpected end of file
답변1
로그에 따르면 SSH를 통해 전송된 명령이 손상되었습니다. 문제를 해결하려면 먼저 drush에서 ssh 호출 위치를 찾으세요.
SSH에 전달된 명령은 다음과 같습니다.
drush --debug --verbose --uri=myremotehost.com --db-url='\''mysql://host:myremotehost.com:11297/database'\'
- 그것은로 분해된다
drush ... --db-url=
'\'
'mysql://.../database'
\'
- 후자는 제안을 개시하는 것과 동일하므로
\'
종료되지 않습니다.'
Bash Reference는 Bash가 무엇인지 정확하게 배울 수 있는 최고의 장소입니다.
답변2
Windows의 PATH 변수로 인해 이전 설치와 다른 drush에 연결되어 있었던 것으로 나타났습니다. Drush는 원격 호스트에 일치하지 않는 따옴표를 보내고 있으며 원격 호스트는 오류를 다시 보내고 있습니다 sh
.
경로를 업데이트했고(drush의 전체 경로를 테스트한 후) 이제 작동합니다.