2009-02-27 90 views
4

我想從.NET應用程序啓動Cygwin版本的ruby.exe,但我卡住了。從.NET執行Cygwin進程?

c:\>"c:\cygwin\bin\ruby.exe" c:\test\ruby.rb 
/usr/bin/ruby: no such file to load -- ubygems (LoadError) 

正如您所看到的,Ruby無法找到庫,因爲它正在尋找一些Linux樣式的路徑。

顯然,當我從.NET運行ruby.exe,因爲它無法找到庫它像上面的失敗。

如果我不加載任何庫正常工作:

c:\>"c:\cygwin\bin\ruby.exe" -v 
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin] 

原來的cygwin啓動與此cygwin.bat

chdir C:\cygwin\bin 
bash --login -i 

我怎樣才能讓.NET來首次進入cygwin的環境然後在該環境中執行ruby?

  • 我不能使用Windows Ruby,我需要cygwin ruby​​。
  • 我知道交互式驅動「bash」的潛在用法,但聽起來很髒,除非有很好的方法。

回答

4

您是否正在使用混合本機Windows ruby​​gems和Cygwin ruby​​?使用Cygwin ruby​​gems似乎對我很好。 (爲什麼你的Cygwin ruby​​解釋器顯然是在用Windows反斜槓搜索一條路徑?)。

另外,你有沒有試過run.exe

C:\cygwin\bin\run.exe -p /starting/dir exe_to_run 

這裏的手冊頁條目:

NAME

運行 - 開始隱藏控制檯窗口

提要

運行[-p路徑]命令[方案等待]參數

runco​​mmand [-p路徑] [-wait]參數

說明

Windows程序或者是GUI程序或控制檯程序。當 開始控制檯程序將連接到現有的控制檯 或創建一個新的。 GUI程序不能附加到退出的唯一的。如果 作爲GUI程序啓動,則無法附加到現有控制檯,但將其隱藏。

運行會爲您做到這一點。它作爲中間件工作並啓動一個pro,但隱藏了控制檯窗口。

使用-p路徑可以將路徑添加到PATH環境變量。

發出 - 等待作爲第一個程序參數將使運行等待程序 完成,否則立即返回。

第二個變種是創建包裝。如果可執行文件是 命名爲runco​​mmand(例如runemacs),則運行將嘗試啓動程序(例如 emacs)。

運行-p在/ usr/X11R6/bin中的xterm

運行的emacs - 等待 runemacs -WAIT

運行make -wait

3

爲什麼不執行從您的.NET應用程序運行ruby的非交互式bash shell?喜歡的東西:

bash --login -c <your-path-to-ruby> <your-library-to-load> 

不知道你的文件結構,但例如,

bash --login -c /usr/bin/ruby ~/test/ruby.rb 

看那-c option from the bash man page以獲得更多信息。

+0

嘗試這一個完全相同的問題。給出這個錯誤:rb /usr/bin/ruby​​:no such file to load - ubygems(LoadError) – 2009-02-27 17:59:57