RubyGems + Cygwin:ruby.exe找不到POSIX路径
我是Windows上的Ruby程序员,他试图从Win cmd切换到Cygwin,但无法实现执行Ruby gem的批处理文件。
我已经将任何bin目录填充到Windows PATH
。 变量,包括存储可执行文件的Ruby bin。 但是,gem由ruby.exe本身调用,这会导致POSIX路径出现以下问题:
duddle@duddledan /cygdrive/c/Ruby/ruby-186-398/bin $ gem -v C:\Ruby\ruby-186-398\bin\ruby.exe: No such file or directory -- /cygdrive/c/Ruby/ruby-186-398/bin/gem (LoadError) duddle@duddledan /cygdrive/c/Ruby/ruby-186-398/bin $ ./gem --version 1.3.7
当通过指定路径直接调用例如./gem
,可以找到并执行它。
有任何想法吗?
编辑:
如何告诉cygwin不要处理批处理文件?
你试图混合那些期望与Cygwin本机路径的批处理文件,这完全不喜欢它。
当你调用./gem时,你正在调用ruby脚本,但使用PATH
正在调用批处理文件。
要么告诉cygwin不要处理批处理文件(不知道如何),要么你想要替换cmd.exe你使用MSYS Bash,但不要将Cygwin与原生Ruby混合使用。
我在过去写过有关混音和匹配的博文:
http://blog.mmediasys.com/2008/10/27/handy-tip-dont-mix-one-click-installer-with-cygwin/
你可以将Cygwin与MingW32 Ruby混合搭配,如果你小心并且有很好的理由这样做。 与MSYS相比,Cygwin提供了更加丰富的CLI环境,但Cygwin捆绑的Ruby比MingW32版本慢得多。 诀窍是在Cygwin .bashrc中为所有RubyGem包装器设置别名。 这是我的一个片段。
alias gem='gem.bat' alias rake='rake.bat' alias erb='erb.bat' alias irb='irb.bat' alias rdoc='rdoc.bat' alias ri='ri.bat' alias rspec='rspec.bat' alias cucumber='cucumber.bat' alias bundle='bundle.bat'
诀窍是像罗伯特在他的回答中指出的那样对所有.bat
文件进行别名。
在每次gem install
之后为你的.bashrc
或.zshrc
添加一个新的别名虽然不好玩……
因此,我通过扫描Ruby的bindir 自动创建这些别名 :
if [[ -n "$(which ruby 2>/dev/null)" ]]; then RUBY_BIN=$(cygpath -u $(ruby -e 'puts RbConfig::CONFIG["bindir"]') | tr '\r' ' ') for f in $(find ${RUBY_BIN} -regex ".*bat$"| xargs -n1 basename); do alias ${f%.bat}=${f} done fi