ruby -e'put“something”'在Mac OS X上不输出任何内容

时间:2012-05-02 08:36:12

标签: ruby macos bundler

这是在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-perf: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工作正常,管道红宝石也有效:

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

只是表现出时髦的ruby -e。 这也发生在我的女朋友Mac上。她使用RVM。

1 个答案:

答案 0 :(得分:0)

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

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

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

我的版本错过了$@周围的引号,这引起了红宝石的行为不端。