Видалити всі встановлені дорогоцінні камені в OSX?


177

Є випадки, коли я хотів би відновити та видалити всі попередні установки дорогоцінних каменів.

Наприклад, мені потрібно було допомогти другові перенести машину для розвитку рейок, щоб використовувати RVM. Оскільки вони раніше використовували систему gem, він відчував багато головних болів під час роботи з кількома проектами. По суті, він був дитиною-плакатом для конвертування RVM.

Як я можу елегантно видалити всі дорогоцінні камені в його OSX-системі?


1
Сьогодні це зайве. RVM знає, де шукати дорогоцінні камені після переходу на потрібну версію Ruby.
Франклін Ю

1
yes Y | gem uninstall -a -I
стопанко

Просто коротка примітка до @FranklinYu - це не завжди так. У мене були випадки , коли глобально встановлена копія Nokogiri , здавалося, завжди приймати прецедент за РВМ gemset, і глобальний один повинен був бути знищений.
Натан Крейз

@NathanCrause Тоді це помилка в RVM і про це потрібно повідомити. Я впевнений, що це не призначена поведінка RVM.
Франклін Ю

@FranklinYu ти маєш рацію, але поки таке питання не буде вирішене, все одно буде необхідний спосіб очистити всі дорогоцінні камені. Я мав на увазі лише те, що це "непотрібно", що було б правдою в ідеальній ситуації, але ей, все йде вбік весь час.
Натан Крейз

Відповіді:


428

Рубігеми> = 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

1
Ду, ти мене побив на швидкість :)
Ромен

3
Тоді, звичайно, ви захочете перевстановити здоровий список дорогоцінних каменів за замовчуванням, який для мене такий: "gem install bundler json minitest rake rdoc"
Wil Moore III

5
список дорогоцінних каменів | вирізати -d "" -f1 | sudo xargs gem uninstall -Iax -работав для мене
lesyk

5
Не працює: ERROR: While executing gem ... (Gem::InstallError) gem "test-unit" cannot be uninstalled because it is a default gem(gem 2.0.3)
M. Anthony Aiello

@Anthony Хоча це трохи небезпечно, ви можете придушити помилки за допомогоюfor i in `gem list --no-versions`; do gem uninstall -aIx $i 2>/dev/null; done
Даррен Чен

46

Ви також можете створити новий Gemfile і запустити bundle clean --force. Це видалить усі інші дорогоцінні камені, які не включені в новий Gemfile.


3
Це дуже корисно :)
користувач1190286

1
найкраща відповідь, оскільки тестовий пристрій неможливо видалити і вбиває процес.
westonplatter

2
Так, це найкраща відповідь. Я вважаю, що ОП повинен обрати цю посаду 2.0.0.
theTuxRacer

2
Це, безумовно, працює для мене і набагато елегантніше, ніж інші версії
Кріспен Сміт,

29

Найтонша інша версія, пропускаючи крок вирізання, скориставшись опцією '--no-version':

gem list --no-version |xargs gem uninstall -ax

Оскільки ви видаляєте все, я не бачу необхідності в опції "Я". Щоразу, коли дорогоцінний камінь буде видалений, це добре.


1
sudoне повинно бути необхідним, якщо дорогоцінні камені були встановлені звичайним користувачем.
sampablokuper

Дивіться мою відповідь з причини, чому я подав заяву. Я хотів прокоментувати тут, але коментарі не дозволяють рядки ...
aercolino

добре, може видалити багато дорогоцінних каменів, але щось не доречне, як пачка, граблі, rvm
охолодження

Дуже елегантний, але не вдається через неможливість видалення дорогоцінних каменів за замовчуванням. Запропонуйте натомість рішення
crftr

11

Спочатку переконайтеся, що у вас є принаймні версія дорогоцінного каменя 2.1.0

gem update --system
gem --version
# 2.6.4

Для видалення просто запустіть:

gem uninstall --all

Можливо, вам доведеться скористатися sudoкомандою:

sudo gem uninstall --all

10

Використовуйте будь-який

$ gem list --no-version | xargs gem uninstall -ax

або

$ sudo gem list --no-version | xargs sudo gem uninstall -ax

Залежно від того, що ви хочете, вам може знадобитися виконати обидва, оскільки "список дорогоцінних каменів" і "список дорогоцінних каменів sudo" містять незалежні списки.

Не змішуйте звичайний «список дорогоцінних каменів» з «видаленням дорогоцінного каміння», який висунув sudo-ed, і навпаки, інакше ви можете видалити встановлені дорогоцінні камені, встановлені судо (колишні), або отримати багато помилок (останніх).


Ви маєте рацію, я змінив свою відповідь, щоб виключити судо. Для обох версій користувачі можуть розраховувати на вашу відповідь.
Тіаго Ганзароллі

9

Якщо ви використовуєте RubyGems версії 2.1.0 або пізнішої версії, ви можете спробувати: gem uninstall --all.


3
Це має бути "gem", а не "gems".
збирати

6

Якщо вам подобається робити це за допомогою рубіну:

ruby -e "`gem list`.split(/$/).each { |line| puts `gem uninstall -Iax #{line.split(' ')[0]}` unless line.strip.empty? }"

Ура


Я отримую помилку з цим: ПОМИЛКА: Під час виконання gem ... (Gem :: CommandLineError) Будь ласка, вкажіть принаймні одне ім'я дорогоцінного каменю (наприклад, gem build GEMNAME)
mbdev

1
@mbdev Виправлено, він підтримує мої відповіді на переповнення стека :)
Haris Krajina

Це зручно тим, що він працює в Windows, де командна оболонка ... не добре.
AdamC

5

Рубігеми> = 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 Готово !!


5

А для тих, хто тут, тому що ви хочете видалити всі дорогоцінні камені з певним префіксом ( ах, я дивлюся на вас aws-sdk!), Ви можете запустити щось подібне:

gem list --no-version | grep "aws-sdk-" | xargs gem uninstall -aIx

Очевидно, замість цього введіть свій запит aws-sdk-. Вам потрібно -Iтам, щоб ігнорувати залежності.

Прийнята форма попередньої відповіді Андо


4

Єдина команда допомогла мені очистити всі дорогоцінні камені та проігнорує дорогоцінні камені, які неможливо видалити

for x in `gem list --no-versions`; do gem uninstall $x -a -x -I; done

2

Я це робив не надто давно (та сама ситуація з перемикачем РВМ, що приймає плакат):

gem list | cut -d" " -f1 | sudo xargs gem uninstall -Iax

Бере список усіх дорогоцінних каменів (включаючи матеріали з версією), скорочує його, щоб зберегти лише ім'я дорогоцінного каміння, а потім видаляє всі версії таких дорогоцінних каменів.

Це sudoкорисно лише в тому випадку, якщо у вас були встановлені дорогоцінні камені на всій системі, і їх не слід включати, якщо не потрібно.


1

Під час спроби видалити дорогоцінні камені, встановлені як root, xargs, здається, зупиняється, коли виникає помилка при спробі видалити дорогоцінний камінь за замовчуванням:

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

1
gem list --no-version | grep -v -e 'psych' -e 'rdoc' -e 'openssl' -e 'json' -e 'io-console' -e 'bigdecimal' | xargs sudo gem uninstall -ax

grep тут виключає дорогоцінні камені за замовчуванням. Усі інші дорогоцінні камені буде видалено. Ви також можете передувати цьому, якщо sudoу вас виникнуть проблеми з дозволом.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.