首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rvm系统安装,bins未正确符号链接

rvm系统安装,bins未正确符号链接
EN

Stack Overflow用户
提问于 2013-04-05 21:33:19
回答 2查看 1.7K关注 0票数 0

我在ubuntu 12.04上安装了rvm system wide:

$ \curl -L https://get.rvm.io | sudo bash -s stable

到目前为止,我总是执行单用户安装,老实说,我对系统范围安装的结果感到相当困惑。

它确实将rvm bin目录放在了我的路径中,但是它用符号链接了所有具有不能直接使用的名称的二进制文件。

这是否意味着我应该一个接一个地对它们进行符号链接?

是不是出了什么问题?

这就是defalt行为吗?

代码语言:javascript
复制
appusr@server-name:/usr/local/rvm/bin$ ll
total 60
drwxrwsr-x  2 root     rvm   4096 Apr  5 13:11 ./
drwxrwsr-x 23 root     rvm   4096 Apr  5 13:04 ../
-rwxrwxr-x  1 root     rvm    578 Apr  5 13:04 bundle*
lrwxrwxrwx  1 appusr   rvm     41 Apr  5 13:11 erb-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/erb*
lrwxrwxrwx  1 appusr   rvm     48 Apr  5 13:11 erb-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/erb*
lrwxrwxrwx  1 appusr   rvm     41 Apr  5 13:11 gem-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/gem*
lrwxrwxrwx  1 appusr   rvm     48 Apr  5 13:11 gem-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/gem*
lrwxrwxrwx  1 appusr   rvm     41 Apr  5 13:11 irb-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/irb*
lrwxrwxrwx  1 appusr   rvm     48 Apr  5 13:11 irb-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/irb*
-rwxrwxr-x  1 root     rvm    556 Apr  5 13:04 rake*
lrwxrwxrwx  1 appusr   rvm     42 Apr  5 13:11 rake-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/rake*
lrwxrwxrwx  1 appusr   rvm     49 Apr  5 13:11 rake-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/rake*
lrwxrwxrwx  1 appusr   rvm     42 Apr  5 13:11 rdoc-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/rdoc*
lrwxrwxrwx  1 appusr   rvm     49 Apr  5 13:11 rdoc-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/rdoc*
lrwxrwxrwx  1 appusr   rvm     40 Apr  5 13:11 ri-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/ri*
lrwxrwxrwx  1 appusr   rvm     47 Apr  5 13:11 ri-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/ri*
lrwxrwxrwx  1 appusr   rvm     42 Apr  5 13:11 ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/ruby*
lrwxrwxrwx  1 appusr   rvm     49 Apr  5 13:11 ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/ruby*
-rwxrwxr-x  1 root     rvm   1307 Apr  5 13:04 rvm*
-rwxrwxr-x  1 root     rvm   1512 Apr  5 13:04 rvm-auto-ruby*
-rwxrwxr-x  1 root     rvm   1803 Apr  5 13:04 rvm-exec*
-rwxrwxr-x  1 root     rvm  13130 Apr  5 13:04 rvm-installer*
-rwxrwxr-x  1 root     rvm   3850 Apr  5 13:04 rvm-prompt*
-rwxrwxr-x  1 root     rvm   2263 Apr  5 13:04 rvm-shell*
-rwxrwxr-x  1 root     rvm    648 Apr  5 13:04 rvm-smile*
-rwxrwxr-x  1 root     rvm   2229 Apr  5 13:04 rvmsudo*
lrwxrwxrwx  1 appusr   rvm     44 Apr  5 13:11 testrb-ruby-2.0.0-p0 -> /usr/local/rvm/wrappers/ruby-2.0.0-p0/testrb*
lrwxrwxrwx  1 appusr   rvm     51 Apr  5 13:11 testrb-ruby-2.0.0-p0@global -> /usr/local/rvm/wrappers/ruby-2.0.0-p0@global/testrb*
appusr@server-name:/usr/local/rvm/bin$ 
appusr@server-name:/usr/local/rvm/bin$ 
appusr@server-name:/usr/local/rvm/bin$ 
appusr@server-name:/usr/local/rvm/bin$ which ruby
appusr@server-name:/usr/local/rvm/bin$ which irb
appusr@server-name:/usr/local/rvm/bin$ which gem
appusr@server-name:/usr/local/rvm/bin$ /usr/bin/env ruby -v
/usr/bin/env: ruby: No such file or directory
appusr@server-name:/usr/local/rvm/bin$ ruby -v
The program 'ruby' can be found in the following packages:
 * ruby1.8
 * ruby1.9.1
Ask your administrator to install one of them
appusr@server-name:/usr/local/rvm/bin$
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-06 22:52:14

我想我找到问题所在了。显然,rvm没有作为一个函数正确加载,也就是说

$ type rvm | head -n 1

没有返回"rvm is a function",而是类似于"rvm is hashed“(...?...)。

同样有趣的是,问题并不局限于系统范围的安装。我内爆了系统范围的rvm安装,删除了/etc中的引用,并在没有sudo的情况下重新安装了它……同样的问题。

我会说这是我的错,我的意思是我不知道bash是如何处理一些用户切换的。它可能对其他人也有用,所以我将报告我所做的事情。

我以普通用户的身份进入服务器,然后切换到将运行rails堆栈的用户:su appusr (使用bash)。

在此之后,我使用以下命令安装了rvm

$ \curl -L https://get.rvm.io | bash -s stable

当然,当我尝试系统范围安装时,我还使用以下命令将用户添加到rvm组:

$ sudo usermod -a -G rvm appusr

...and注销并再次登录:exit,然后再次登录su appusr

现在看来,通过这样做,bash只是获取了~/.bashrc,而不是~/.bash_profile,而不是rvm将语句作为函数加载rvm的地方:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

尽管如此,Ruby二进制文件在我的路径中,我可以发出安装rvm所需的命令。

到现在为止还好。

问题是在安装之后,它不知何故没有选择我安装的only ruby作为默认解释器,所以它没有创建符号链接。

我之所以注意到这一点,是因为当我发出rvm list命令时,我得到的提示是:

代码语言:javascript
复制
rvm rubies

   ruby-2.0.0-p0 [ x86_64 ]

# => - current
# =* - current && default
#  * - default

..。注意它是如何用标记的,而不是用=*标记的

我使用了命令rvm use ruby-2.0.0-p0 --default,我被警告说rvm不是作为一个函数加载的,有些东西不能工作(不记得确切的消息)。

这是一个突破,当我开发~/.bash_profile时,我可以成功地选择该ruby,所有的符号链接(rubyirbrake等)都会立即创建。

不过,这并不理想。

我的$HOME文件夹的默认设置通常有三个文件:~/.profile~/.bash_profile~/.bashrc (加上用于zsh的文件)。

~/.bash_profile是由rvm安装添加的,我正在将其作为~/.profile的源代码。

然后,如果正在使用~/.bashrc bash,则~/.profile会自动获取

然而,正如我所说的,通过执行su appusr bash只是~/.bashrc的源代码,因此无法解析将rvm作为函数加载的语句。非常烦人。

告诉~/.bashrc~/.bash_profile需要某种控制( ENV变量?)为了避免无限的引用循环,而且看起来有点过了.

所以我刚把[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"移到了~/.bashrc中,我想说现在一切似乎都正常了。

票数 1
EN

Stack Overflow用户

发布于 2013-04-06 03:25:56

您应该检查/usr/local/rvm/wrappers,尤其是/usr/local/rvm/wrappers/default,查找可以在没有其他环境设置的情况下从PATH中使用的二进制文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15835329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档