0

这就是在 Debian 机器上发生的事情

$ ruby -e 'puts "something"'
something
$

这是我所期望的。

但是,当我在我的 Mac(OS X 10.7.3)上运行相同的程序时,我得到了

1.9.3-p125-perf $ ruby -e "puts 'something'"

1.9.3-p125-perf $ ruby -e "print 'something'"
1.9.3-p125-perf $ rbenv shell 1.8.7-p358
1.8.7-p358 $ ruby -e "puts 'something'"

1.8.7-p358 $ ruby -e "print 'something'"
nil1.8.7-p358 $ rbenv shell system
system $ ruby -e "puts 'something'"

system $ ruby -e "print 'something'"
nilsystem $ 

有谁知道这里发生了什么以及我如何让 ruby​​ 再次输出有意义的东西?

我的 Ruby 版本:

1.9.3-p125-性能:ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0]

1.8.7-p358:ruby 1.8.7 (2012-02-08 patchlevel 358) [i686-darwin11.3.0]

系统:ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]

脚本或 IRB 可以正常工作,管道 ruby​​ 也可以:

1.9.3-p125-perf $ cat | ruby
puts "foo"
^D
foo

它只是ruby -e表现得很时髦。这也发生在我的girlfirends Mac上。她使用 RVM。

4

1 回答 1

0

我找到了罪魁祸首。我使用的是旧版本的bundler-exec

bundler-exec为预定义的命令列表创建 shell 别名并将它们包装在此函数中:

run-with-bundler()
{
    if bundler-installed && within-bundled-project; then
        bundle exec "$@"
    else
        "$@"
    fi
}

我的版本缺少引号$@,导致 ruby​​ 行为不端。

于 2012-05-02T20:50:27.817 回答