全面 RVM 拒绝权限错误 - OS X Mavericks - Ruby 2.0.0?

bon*_*nes 2 ruby permission-denied rvm

在梳理了大量修复程序后,我陷入了停滞。我是 Ruby/编程的新手,并且在今天早些时候安装了 Ruby/RVM 非常好,可以正常工作(单用户),但是发生了一些变化,我尝试修复它可能造成的损害大于好处。

本质上,当我尝试运行我的基本 .rb 文件时,它给了我:

 ruby: No such file or directory -- doom.rb (LoadError)
Run Code Online (Sandbox Code Playgroud)

我尝试卸载 RVM 并重新安装,我认为这就是我搞砸的地方。我用过rvm implode,我认为这是一个不完整的删除。现在当我尝试它时,它只是说command not found。大多数其他修复程序都会显示相同的消息,repair以及get head,你有什么。

如果我尝试重新安装任何存在/不存在的东西,我会看到一个充满权限拒绝错误和已经存在的对象的屏幕:

rm: /Users/caroljones/.rvm/src/rvm/patchsets/ruby/1.9.3/p385: Permission denied
.
.
.
scripts/wrapper: Can't unlink already-existing object
scripts/zsh/: Can't update time for scripts/zsh
scripts/zsh/Completion/: Can't update time for scripts/zsh/Completion
scripts/zsh/Completion/_rvm: Can't unlink already-existing object
tar: Error exit delayed from previous errors.
Could not extract RVM sources.
Run Code Online (Sandbox Code Playgroud)

如果我运行echo $PATH,我会得到这个:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/bin/
Run Code Online (Sandbox Code Playgroud)

Ruby 安装正常:

ruby 2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13]
Run Code Online (Sandbox Code Playgroud)

我认为这归结为没有进行干净的卸载,但我无法弄清楚如何查明内爆留下的垃圾。

如果我可以给你任何其他信息来澄清我的问题,请告诉我。

编辑:如果我运行which ruby我得到这个输出:

/usr/bin/ruby
Run Code Online (Sandbox Code Playgroud)

$ ls -al ~ | grep rvm我得到:

drwxr-xr-x    5 caroljones  staff    170 May  5 17:35 .rvm
Run Code Online (Sandbox Code Playgroud)

the*_*Man 5

我很确定您sudo在(取消)安装过程中的某个时候使用过,这改变了您的权限,并且会解释您的权限拒绝错误。

您的路径配置不正确;“local/bin”目录应该在“usr/bin”目录之前。“本地”目录的想法是它包含您安装的命令,以及覆盖/更新系统安装的预先存在的命令。当“本地”目录在 PATH 中的“usr”目录之前时,它们的命令将在“usr”目录之前找到并使用。按原样,您的路径不允许这样做。代替:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/bin/
Run Code Online (Sandbox Code Playgroud)

它应该看起来像:

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
Run Code Online (Sandbox Code Playgroud)

这不会让 Ruby 或 RVM 正确运行,但它会帮助您的命令行体验按预期方式工作。

一旦我们获得有关您的环境/配置的更多信息,我们就可以提供解决方案来让您的系统正常工作。


正如您所建议的那样,我在此过程中的某个时刻使用了一个“sudo”修复程序,该修复程序破坏了我的权限。

sudo将导致在命令运行时创建的文件和目录归 root 所有,并且尝试更改它们会给您带来您看到的错误。您可以通过将文件和目录的所有权归还给您来解决该问题。但是请注意,你希望这样做慎之又慎。如果您更改了错误的文件,更改所有权可能会将您的机器变成一块砖。

要更改 ~/.rvm 及其所有内容的所有权,请使用:

sudo chown -R caroljones ~/.rvm
Run Code Online (Sandbox Code Playgroud)

之后,应该修复访问 ~/.rvm 中文件的权限问题。

那时你可以运行:

rm -rf ~/.rvm
Run Code Online (Sandbox Code Playgroud)

完全删除 RVM,类似于rvm implode会做的事情。那时我认为您可以安全地重新安装 RVM。

在此之前,请完整仔细地阅读RVM 安装页面。有关于如何修改 ~/.bashrc 或 ~/.bash_profile 以允许在创建 shell 时初始化 RVM 的说明。人们掩盖了这个过程,认为 RVM 一切都很好,但不明白它与他们的系统有什么关系。这不是一个好主意,因为知道什么应该到位将使诊断和修复问题变得容易。

您的 ~/.bashrc 或 ~/.bash_profile 文件之一应该具有在创建 shell 时加载 RVM 的代码。那应该在文件的底部;它不一定是最后一个,但您确实需要了解它可以移动的方式和原因。