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
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?