0

有点奇怪的问题:当我这样做时,一切正常:

ssh abc@myurl 
drush -v

但像这样它失败了:

ssh abc@myurl "drush -v"

它产生:

: No such file or directorysh/drush: line 10: cd: /cygdrive/c/ProgramData/Drush
/drush.phpopen input file: .

完全相同的命令,只是不能作为内联命令工作,这是我编写这个东西所需要的。是的,涉及cygwin,所以不知道这是否相关,希望不是。

知道如何使第二种形式起作用吗?其他命令工作正常,例如:

ssh abc@myurl "cd /cygdrive/c/mydrupaldir; pwd"

[编辑]为了简单起见,我缩小了重现的步骤,我还发现了失败的原因:drush 对 cygwin 有特殊处理,它依赖于它uname -a来确定,这就是关键区别:

ssh abc@myurl
uname -a

产生:

CYGWIN_NT-6.1 MYURL 1.7.28(0.271/5/3) 2014-02-09 21:06 x86_64 Cygwin

但是这个:

ssh abc@myurl "uname -a"

产生:

Server 4.0 windows32 MYURL 2.6.1 7601 ix86-pc AMD unknown MinGW

我已经通过对脚本的硬编码更改解决了我的直接问题,但现在的问题是,为什么 uname 在这两种情况下会给出不同的结果?

4

1 回答 1

0

因为您试图在没有任何环境变量的情况下执行 shell 命令。系统不知道如何回答。正确的方法是:

ssh abc@myurl "/usr/bin/bash.exe -cl 'uname -a'"

这里-c用于将以下字符串作为命令读取,而-l用于指定 bash 应作为“登录 shell”调用。可能还有其他工作变化。

于 2014-03-12T12:55:39.233 回答