我有一位同事正在通过 CMS Drupal 使用的名为 drush 的 php/命令行工具连接到远程 Web 主机。
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]
shell 正常启动,我们可以运行典型的 GNU 实用程序命令,因此看起来.bashrc
或其他点文件没有错误。
作为故障排除措施,我们重新安装了 drush 命令(shell 和 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 参考是准确了解 Bash 的最佳位置
答案2
事实证明,由于 Windows 上的 PATH 变量,我们链接了与之前安装不同的 drush。该 drush 正在向远程主机发送不匹配的报价,远程主机正在发回错误sh
。
我们更新了路径(在测试指定 drush 的完整路径后),现在它可以工作了。