有点奇怪的问题:当我这样做时,一切正常:
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会在这两种情况下给出不同的结果?
答案 0 :(得分:0)
因为您尝试在没有任何环境变量的情况下执行shell命令。系统不知道如何回答。正确的方法是:
ssh abc@myurl "/usr/bin/bash.exe -cl 'uname -a'"
此处-c
用于将以下字符串作为命令读取,而-l
用于指定应将bash作为"登录shell"来调用。可能还有其他可行的变化。