在某些情况下,我想还原并卸载所有以前的gem安装。
例如,我需要帮助一个朋友迁移他们的Rails开发机器以使用RVM。由于他们以前在整个系统中使用过gem
,所以在处理多个项目时,他遇到了许多麻烦。 本质上,他是RVM转换的后代。
如何优雅地卸载他的OSX系统上的所有gem?
yes Y | gem uninstall -a -I
在某些情况下,我想还原并卸载所有以前的gem安装。
例如,我需要帮助一个朋友迁移他们的Rails开发机器以使用RVM。由于他们以前在整个系统中使用过gem
,所以在处理多个项目时,他遇到了许多麻烦。 本质上,他是RVM转换的后代。
如何优雅地卸载他的OSX系统上的所有gem?
yes Y | gem uninstall -a -I
Answers:
红宝石> = 2.1.0
gem uninstall -aIx
a
删除所有版本,
I
忽略依赖项,
x
包括可执行文件
宝石<2.1.0
for i in `gem list --no-versions`; do gem uninstall -aIx $i; done
ERROR: While executing gem ... (Gem::InstallError) gem "test-unit" cannot be uninstalled because it is a default gem
(gem 2.0.3)
for i in `gem list --no-versions`; do gem uninstall -aIx $i 2>/dev/null; done
您还可以构建一个新的Gemfile并运行bundle clean --force
。这将删除新Gemfile中未包含的所有其他宝石。
最小的版本,跳过剪切步骤,利用'--no-version'选项:
gem list --no-version |xargs gem uninstall -ax
由于您要删除所有内容,因此我看不到需要“ I”选项。只要将宝石移除,就可以了。
sudo
如果宝石是由普通用户安装的,则没有必要。
使用任一
$ gem list --no-version | xargs gem uninstall -ax
要么
$ sudo gem list --no-version | xargs sudo gem uninstall -ax
根据您的需要,您可能需要同时执行这两个操作,因为“宝石列表”和“ sudo宝石列表”提供了独立的列表。
不要将普通的“ gem列表”与sudo-ed的“ gem卸载”混合使用,也不要将其混在一起,否则可能会导致卸载sudo安装的gems(以前)或出现很多错误(后期)。
如果您喜欢使用红宝石:
ruby -e "`gem list`.split(/$/).each { |line| puts `gem uninstall -Iax #{line.split(' ')[0]}` unless line.strip.empty? }"
干杯
红宝石> = 2.1.0
gem uninstall -aIx
如果终端返回错误以下
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
然后如下写上面的命令
sudo gem uninstall -aIx
然后输入您的Mac OS帐户密码!
对于那些因为要删除所有带有特定前缀的宝石而出现在这里的人(哎呀,我在看你aws-sdk!),您可以运行以下命令:
gem list --no-version | grep "aws-sdk-" | xargs gem uninstall -aIx
显然在您的查询中,而不是aws-sdk-
。您需要-I
在其中忽略依赖项。
通过安藤的早期答案
唯一的命令可以帮助我清理所有gem,并忽略无法卸载的默认gem
for x in `gem list --no-versions`; do gem uninstall $x -a -x -I; done
尝试删除以root用户身份安装的gem时,xargs在遇到尝试卸载默认gem的错误时似乎停止了:
sudo gem list | cut -d" " -f1 | xargs gem uninstall -aIx
# ERROR: While executing gem ... (Gem::InstallError)
# gem "test-unit" cannot be uninstalled because it is a default gem
这并非对每个人都适用,但是这是我使用的:
sudo for gem (`gem list | cut -d" " -f1`); do gem uninstall $gem -aIx; done