3

摘要:在 Windows 机器上,我怎样才能使 Bourne shell 成为活动的 Ruby shell?这是我想要发生的事情:

irb> exec('echo $SHELL')
/bin/sh

实际输出为:

irb> exec('echo $SHELL')
$SHELL

如果我尝试在cmd.exe. 根据 Ruby 文档,它看起来像exec调用检查$RUBYSHELL$COMSPEC(按那个顺序?)。我已经尝试设置$RUBYSHELL"C:\Program Files (x86)\Git\bin\sh.exe"我拥有、 和副本的位置sh,但似乎都不起作用。看起来它基本上完全忽略了....../bin/sh/shRUBYSHELL

为什么?:我正在使用一个 Ruby gem,它调用exec并传递Shellwords.shelljoin. 该调用转义字符,但仅适用于 Bourne shell。在 Windows' 下运行时cmd.exe,它似乎对任何转义的引号字符都感到厌恶,而只是忽略它们。因此,该命令无法正确解释。我想解决我的问题的另一种方法是让我知道是否有更好的跨平台方法来执行转义命令序列,但在我看来,如果我可以制作sh我的活动 Ruby shell,我的问题就会得到解决。

4

2 回答 2

0

我会直接执行shell,例如 exec('c:\bin\sh')

我应该注意(您可能知道这一点),通过用百分号包围它们来访问 Windows 环境变量:

irb> exec(`echo %SHELL%`)
于 2012-08-27T04:01:23.643 回答
0
exec("sh","-c","echo $SHELL")

这种务实的做法应该可以解决这种情况,在我的环境中它在不同的运行时环境中工作方式相同,例如:

Windows 7 64 位 ruby​​ 2.1.6p336 上的 mingw32(2015-04-13 修订版 50298)[i386-mingw32] 红宝石 2.1.6p336

OS-X 10.10.3 ruby​​ 2.0.0p451(2014-02-24 修订版 45167)[x86_64-darwin13.1.0] 红宝石 2.0.0p451

于 2015-05-05T19:54:00.787 回答