在ssh之后输入命令与作为单行输入之间的区别

时间:2014-03-10 20:29:54

标签: drupal ssh cygwin drush

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

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会在这两种情况下给出不同的结果?

1 个答案:

答案 0 :(得分:0)

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

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

此处-c用于将以下字符串作为命令读取,而-l用于指定应将bash作为"登录shell"来调用。可能还有其他可行的变化。