升级到Ruby 2.0,在没有提示的情况下覆盖可执行文件

时间:2013-05-08 21:03:19

标签: ruby linux

在linux上从ruby 1.9.3升级到ruby 2.0(至少12.04)时会出现意外提示。

rdoc's executable "rdoc" conflicts with /path/bin/rdoc
Overwrite the executable? [yN]  

它可以手动覆盖它,但我正在寻找一种方法,我的脚本将自动回复是,而不会停止。

刚刚在rubygems from a year ago上发现了这个问题。我在脚本中使用gem install因此我认为我可以轻松添加yes | gem install

编辑: 尝试yes | gem install rdoc,但失败了:

ERROR:  Error installing rdoc:
"rdoc" from rdoc conflicts with /usr/local/rubies/2.0.0-p0/bin/rdoc

5 个答案:

答案 0 :(得分:3)

您可以预先

 yes |

是的,只需反复输入y,然后通过管道传输到标准输入。

(感谢@adamdunson)

答案 1 :(得分:1)

对我来说,使用Ubuntu和Ruby 2.0是的如上所述的prepend解决方案不能像我的自动构建脚本(使用sprinkle gem)中描述的那样工作。

因此,我在构建脚本中添加了一个步骤,在执行安装之前重命名(在我的情况下)/ usr / local / bin / rdoc和/ usr / local / bin / ri。

因此安装重新创建这些文件而没有令人讨厌的提示,我似乎无法以某种方式避免。就个人而言,我认为https://github.com/rubygems/rubygems/pull/280的建议是一个很好的建议,尽管这似乎并没有被社区公开拥抱。

我的解决方案是一个稍微粗略的解决方法,但可能会帮助其他人,直到有更优雅的解决方案。

答案 2 :(得分:1)

--force为我工作:

gem install --force rdoc

免责声明:这不是--force的用途,我也不知道为什么yes |无效。

答案 3 :(得分:0)

实际上,你不应该说是的。 This is currently a bug right now for Ruby 2.0。我自己的修复(无论如何,即使这不是问题,我也会这样做!)是使用gemset处理程序(我正在使用rbenv-gemset,现在使用rbenv)。

答案 4 :(得分:0)

在我的情况下,前缀yes |不起作用(rubygems验证输入是否为tty)。什么对我有用:

expect <<-DONE
    set timeout -1
    spawn gem update
    expect {
        "Overwrite the executable?" { send -- "y\r"; exp_continue }
        eof
    }
DONE