2013-04-17 27 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脚本来解决这个限制。

相关问题