如何配置Cygwin使用PATHEXT环境变量进行搜索?

时间:2013-02-07 00:03:53

标签: ruby-on-rails ruby windows cygwin

我正在尝试在Cygwin下运行Rails,但是当我键入“rails -v”时,它会找到“rails”并抛出错误。当我输入“rails.bat -v”时它工作得很好。在本机Windows命令处理器中工作正常,因为它使用PATHEXT来识别可执行文件,如.BAT。

我在.bash_profile中添加了一行,如下所示,据我所知,它正在设置变量。

export PATHEXT=".RB;.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC"

这是我的输出:

$ echo $PATH
/usr/local/bin:/usr/bin:/cygdrive/c/Program Files/Common Files/Microsoft Shared/Windows Live:/cygdrive/c/Program Files (x86)/Common Files/Microsoft Shared/Windows Live:/cygdrive/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common:/cygdrive/c/Windows/system32:/cygdrive/c/Windows:/cygdrive/c/Windows/System32/Wbem:/cygdrive/c/Program Files/WIDCOMM/Bluetooth Software:/cygdrive/c/Program Files/WIDCOMM/Bluetooth Software/syswow64:/cygdrive/c/Program Files (x86)/Windows Live/Shared:/cygdrive/c/Program Files/Intel/WiFi/bin:/cygdrive/c/Program Files/Common Files/Intel/WirelessCommon:/cygdrive/c/Program Files/Microsoft Windows Performance Toolkit:/cygdrive/c/Program Files (x86)/QuickTime/QTSystem:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0:/cygdrive/c/Program Files/Microsoft/Web Platform Installer:/cygdrive/c/Program Files/7-Zip:/cygdrive/d/sysinternals:/cygdrive/d/batch:/cygdrive/d/Program Files/Sublime Text 2:/cygdrive/d/RailsInstaller/Ruby1.9.3/bin:/cygdrive/d/RailsInstaller/Git/cmd:/cygdrive/d/RailsInstaller/Git/bin:/usr/bin:/cygdrive/d/batch

 18:54~
$ echo $PATHEXT
.RB;.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

 18:54~
$ which rails
/cygdrive/d/RailsInstaller/Ruby1.9.3/bin/rails

 18:54~
$ which rails.bat
/cygdrive/d/RailsInstaller/Ruby1.9.3/bin/rails.bat

 18:55~
$ rails -v
D:\RailsInstaller\Ruby1.9.3\bin\ruby.exe: No such file or directory -- /cygdrive/d/RailsInstaller/Ruby1.9.3/bin/rails (LoadError)

 18:55~
$ rails.bat -v
Rails 3.2.11

 18:55~
$

2 个答案:

答案 0 :(得分:0)

看起来你正在使用Railsinstaller ruby​​二进制文件,它基本上是RubyInstaller的重新分发,其中包含了捆绑Rails开发的一些基本功能。

然而,一切实际上都按预期工作。

Cygwin不会使用PATHTEXT,因为它不需要。换句话说,它将调用rails binstub而不是rails.bat批处理文件。由于binstubs中有hashbang,因此cygwin会处理整个执行过程。

此外,没有为Cygwin编译RubyInstaller发行版。因此ruby.exe无法理解Cygwin路径的查找。这就是你获得LoadError的原因。

在我看来,您应该查看this answer by Luis Lavena to a similar question。但是,如果你真的想,你可以在Cygwin中重新编译Ruby或者获得Cygwin Ruby发行版。

答案 1 :(得分:0)

(在使用RailsInstaller的Windows中)对我来说唯一的方法是对安装路径添加和别名。

alias rails='C:/RailsInstaller/Ruby1.9.3/bin/rails'

一旦我在cygwin终端输入,它就可以正常工作。