rastreando um erro de sintaxe sh

0

Eu tenho um colega que está se conectando a um host remoto por meio de uma ferramenta de linha de comando / php que o Drupal do CMS usa chamado drush.

O Drush se conecta ao host remoto através do ssh, mas quando emitimos comandos, estamos recebendo um erro quando o bash tenta analisar um determinado arquivo. No entanto, ele não informa qual arquivo tem o erro de sintaxe.

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]

O shell é iniciado normalmente e podemos executar comandos típicos do utilitário GNU, portanto, não parece que o .bashrc ou outros arquivos pontuais tenham o erro.

Como medida de solução de problemas, re-instalamos o comando drush (uma combinação de scripts shell e php). Podemos executar vários comandos com ele, exceto este, que se conecta a um host remoto.

Como podemos começar a rastrear onde o erro está ocorrendo?

Estamos usando o git-bash GNU bash, version 4.4.12(1)-release (x86_64-pc-msys) no Windows 7.

Editar

Na saída que colei acima, havia alguns comutadores de verbosidade e depuração usados para obter mais informações.

Acabei de baixar novamente o nosso arquivo drush e executei novamente o comando sem os comutadores, e é isso que obtemos

$ 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
    
por user394 15.08.2017 / 22:56

2 respostas

0

Acontece que, por causa da variável PATH em nossas janelas, estávamos vinculando a um drush diferente de uma instalação anterior. Esse drush estava enviando a cotação sem correspondência para o host remoto, que estava enviando de volta os erros sh .

Atualizamos o caminho (depois de testar especificando o caminho completo para o drush) e ele funciona agora.

    
por 16.08.2017 / 16:44
0

De acordo com o log, o comando enviado via ssh está quebrado. Para resolver o seu problema, primeiro localize onde está a invocação para o ssh dentro do drush.

O comando passado para o ssh é

    drush  --debug --verbose --uri=myremotehost.com --db-url='\''mysql://host:myremotehost.com:11297/database'\'
  1. divide-se em drush ... --db-url= '\' 'mysql://.../database' \'
  2. o último \' mesmo que ' está abrindo uma cotação, portanto não fechado

A referência de bash é o melhor lugar para se ter uma ideia precisa de

por 15.08.2017 / 23:57