2013-04-17 41 views
2

我已經安裝了最新的Git Bash(msy​​sgit)。如果我創建一個名爲test.rb,內容如下一個簡單的ruby文件:ruby​​腳本與命令產生一個DOS shell而不是一個msysgit一個

#!/usr/bin/env ruby 

puts `dir` 
puts `ls -al` 

運行ruby test.rb將打印目錄第一puts但未能找到第二putsls。它顯然產生了一個DOS shell而不是一個msysgit shell。

如何指定子進程應該在msysgit shell下運行?

另外,子shell應該從調用shell繼承環境變量(特別是PATH)。

+1

[** childprocess ** gem](http://www.plugingeek.com/repos/jarib/childprocess)可能會幫助您產生自定義類型的過程。來自docs的一個例子:'process = ChildProcess.build(「ruby」,「-e」,「sleep」)' –

+0

缺少的唯一東西可能是msys工具的PATH。如果將'ls'更改爲'ls.exe'程序的絕對路徑,它會起作用嗎? – Nick

+0

@Nick:它產生了一個CMD shell,因此如果我用它的顯式路徑調用ls.exe,它就可以工作。不過,我在這裏使用'ls'作爲示例。我需要執行rake和ruby命令,這些命令依賴於bash .bash_profile和.profile中的設置。我不願意將它們複製爲Windows環境變量。我們的景觀必須保持多臺機器。 – Alkaline

回答

0

截止撰寫的答案是,這是不可能的。 msysgit中的spawn進程是一個CMD進程。然而,我們可以讓CMD過程調用一個ruby腳本來解決這個限制。

相關問題