27 votos

Cómo eliminar Homebrew de forma limpia

¿Cómo puedo desinstalar Homebrew de forma limpia? Es posible que tenga una instalación antigua defectuosa y me gustaría empezar de nuevo desde cero.

1 votos

Ver también superuser.com/questions/203707/… que tiene respuestas que describen una forma "ahora canónica" de eliminar homebrew.

0 votos

@rogerdpack Los comentarios pueden ser eliminados en cualquier momento, ¿puedes por favor publicar una respuesta describiendo el nuevo método?

17voto

fkydoniefs Puntos 11

Este rm -rf no va a preguntar si estás seguro cuando eliminas, así que asegúrate de que el comando cd funcione para sacarte de /tmp (el cd /tmp te lleva a un lugar seguro en caso de que copies/pegues todo de una vez para que no borres archivos de tu directorio actual)

Intenta esto en tu Terminal:

cd /tmp
cd `brew --prefix`
rm -rf Cellar
brew prune
rm `git ls-files`
rm -r Library/Homebrew Library/Aliases Library/Formula Library/Contributions
rm -rf .git
rm -rf ~/Library/Caches/Homebrew

Más información sobre este tema se puede encontrar en el FAQ de Homebrew.

1 votos

Yo revisaría que el cd `brew --prefix` vaya a una carpeta en la que no tengas archivos git normales verificados, ya que una configuración antigua / defectuosa podría fallar y la eliminación de git ls-files podría borrar algo que no sean los restos de tu brew.

0 votos

Sí leí la documentación, solo pensé que podría ser una pregunta útil para futuras referencias. Sin embargo, tengo problemas con las instrucciones, las cuales publiqué como una pregunta separada: apple.stackexchange.com/questions/82863/…

0 votos

Tenga en cuenta que el enlace al FAQ de Homebrew debe actualizarse de github.com/mxcl/homebrew/wiki/FAQ/… a github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/‌​… (no puedo editar o agregar comentarios).

6voto

AnneTheAgile Puntos 111

Mientras que la instalación de HomeBrew está ubicada de forma prominente en su página principal, los detalles no lo están. https://brew.sh/ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" Durante mucho tiempo fue muy difícil encontrar un desinstalador confiable. Ahora, a varios clics de distancia en la documentación, hay un método oficial: https://docs.brew.sh/FAQ Para desinstalar Homebrew, pegue el siguiente comando en un terminal: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"

3voto

asymptotically Puntos 889

Aquí tienes una solución mucho mejor para eliminar Homebrew: https://gist.github.com/SteveBenner/11254428

#!/usr/bin/env ruby
#
# Localiza y elimina la instalación de Homebrew
# http://brew.sh/
#
# Autor: Stephen Benner
# https://github.com/SteveBenner
#
require 'optparse'
require 'fileutils'
require 'open3'

$stdout.sync = true

# Opciones por defecto
options = {
  :quiet     => false,
  :verbose   => true,
  :dry_run   => false,
  :force     => false,
  :find_path => false
}

optparser = OptionParser.new do |opts|
  opts.on('-q', '--quiet', 'Modo silencioso - suprime la salida.') do |setting|
    options[:quiet]   = setting
    options[:verbose] = false
  end
  opts.on('-v', '--verbose', 'Modo detallado - imprime todas las operaciones.') { |setting| options[:verbose] = setting }
  opts.on('-d', '--dry', 'Simulación - imprime los resultados, pero no realiza operaciones reales.') do |setting|
    options[:dry_run] = setting
  end
  opts.on('-f', '--force', 'Fuerza la eliminación de archivos, omitiendo la confirmación. UTILIZAR CON PRECAUCIÓN.') do |setting|
    options[:force] = setting
  end
  opts.on('-p', '--find-path', 'Muestra la ubicación de Homebrew si se encuentra y luego sale.') do |setting|
    options[:find_path] = setting
    options[:quiet]     = true
  end
  opts.on('-h', '--help', '--usage', 'Muestra información de uso y sale.') { puts opts; exit }
end
optparser.parse!
$quiet = options[:quiet] # proporciona acceso al valor de la opción dentro de los métodos

# Archivos instalados en el repositorio de Homebrew
BREW_LOCAL_FILES = %w[
  .git
  Cellar
  Library/brew.rb
  Library/Homebrew
  Library/Aliases
  Library/Formula
  Library/Contributions
  Library/LinkedKegs
]
# Archivos que Homebrew instala en otras ubicaciones del sistema
BREW_SYSTEM_FILES = %W[
  #{ENV['HOME']}/Library/Caches/Homebrew
  #{ENV['HOME']}/Library/Logs/Homebrew
  /Library/Caches/Homebrew
]
$files = []

# Esta función ejecuta el comando dado en un subshell, esperando que la salida sea la
# ruta de una instalación de Homebrew. Si se le pasa un bloque, pasa la salida del shell al
# bloque para procesarla, utilizando el valor de retorno del bloque como la nueva ruta.
# Luego se buscan los archivos conocidos de Homebrew y se añaden a la lista de archivos. Luego se prueba
# el directorio en busca de una instalación de Homebrew, y se añade el índice de git si se encuentra un repositorio válido.
# La función no se ejecutará una vez que se encuentre una instalación de Homebrew, pero acumulará archivos de Homebrew no rastreados en cada invocación.
#
# @param  [String] cmd       un comando de shell para ejecutar
# @param  [String] error_msg mensaje a imprimir si el comando falla
#
def locate_brew_path(cmd, error_msg = 'verificar la instalación de Homebrew y la RUTA.')
  return if $brew_location # detener la prueba si encontramos una instalación de Homebrew válida
  puts "Buscando la instalación de Homebrew utilizando '#{cmd}'..." unless $quiet

  # Ejecutar el comando de shell dado junto con cualquier código pasado a través de un bloque
  path = `#{cmd}`.chomp
  path = yield(path) if block_given? # pasar la salida del comando a tu propio y elaborado bloque de código

  begin
    Dir.chdir(path) do
      # Buscar archivos y carpetas conocidos de Homebrew, independientemente de la presencia de git
      $files += BREW_LOCAL_FILES.select { |file| File.exist? file }.map {|file| File.expand_path file }
      $files += Dir.glob('**/{man,bin}/**/brew*')
      # Probar el repositorio git de Homebrew (usar popen3 para poder suprimir la salida de error de git)
      repo_name = Open3.popen3('git remote -v') do |stdin, stdout, stderr|
        stderr.close
        stdout.read
      end
      if repo_name =~ /homebrew.git|Homebrew/
        $brew_location = path
      else
        return
      end
    end
  rescue StandardError # en errores normales, continuar con el programa
    return
  end
end

# Intenta localizar la instalación de Homebrew utilizando un comando y un bloque de código opcional
# para procesar los resultados del comando. La localización de una ruta válida detiene la búsqueda.
locate_brew_path 'brew --prefix'
locate_brew_path('which brew') { |output| File.expand_path('../..', output) }
locate_brew_path 'brew --prefix' do |output|
  output = output.split($/).first
  File.expand_path('../..', output)
end

# Se encontró la instalación de Homebrew
if $brew_location
  puts "Homebrew encontrado en: #{$brew_location}" unless options[:quiet]
  if options[:find_path]
    puts $brew_location
    exit
  end
  # Recopilar archivos indexados por git
  begin
    Dir.chdir($brew_location) do
      # Actualizar la lista de archivos (usar popen3 para poder suprimir la salida de error de git)
      Open3.popen3('git checkout master') { |stdin, stdout, stderr| stderr.close }
      $files += `git ls-files`.split.map {|file| File.expand_path file }
    end
  rescue StandardError => e
    puts e # Informar de cualquier error, pero continuar el script y recopilar cualquier archivo restante
  end
end

# Recopilar los archivos que Homebrew puede haber instalado en todo nuestro sistema
$files += BREW_SYSTEM_FILES.select { |file| File.exist? file }

abort '¡No se encontraron archivos de homebrew!' if $files.empty?

# ¡DESTRUIR! ¡DESTRUIR! ¡DESTRUIR!
unless options[:force]
  print "¿Eliminar #{$files.count} archivos? "
  abort unless gets.rstrip =~ /sí|yes/i
end

rm =
  if options[:dry_run]
    lambda { |entry| puts "eliminando #{entry}" unless options[:quiet] }
  else
    lambda { |entry| FileUtils.rm_rf(entry, :verbose => options[:verbose]) }
  end

puts 'Eliminando archivos...' unless options[:quiet]
$files.each(&rm)

1 votos

¡Bienvenido a Ask Different! Aunque el enlace que proporcionaste puede responder a la pregunta, es mejor incluir la respuesta aquí y proporcionar el enlace como referencia. Las respuestas basadas únicamente en enlaces pueden volverse inválidas si la página enlazada cambia. He editado tu pregunta para incluir lo que creo que era la solución a la que te referías, sin embargo, si no lo era, por favor cita la sección relevante. Además, ¿podrías expandir en por qué tu solución es mejor?

1 votos

Es más de unas pocas líneas, así que pensé que incluir el código sería engorroso, pero estaré encantado de hacerlo en el futuro. Es mejor porque hay archivos y directorios que no fueron capturados por la respuesta publicada, los cuales mi script eliminará. Proporciona utilidad para el usuario a través de opciones de CLI, busca de manera más exhaustiva las ubicaciones de brew, y está codificado de manera que sea fácil de modificar en caso de que desee mejorar el script.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X