Here is a much better solution for removing Homebrew: https://gist.github.com/SteveBenner/11254428 #!/usr/bin/env ruby # # Locates and removes Homebrew installation # http://brew.sh/ # # Author: Stephen Benner # https://github.com/SteveBenner # require 'optparse' require 'fileutils' require 'open3' $stdout.sync = true # Default options options = { :quiet => false, :verbose => true, :dry_run => false, :force => false, :find_path => false } optparser = OptionParser.new do |opts| opts.on('-q', '--quiet', 'Quiet mode - suppress output.') do |setting| options[:quiet] = setting options[:verbose] = false end opts.on('-v', '--verbose', 'Verbose mode - print all operations.') { |setting| options[:verbose] = setting } opts.on('-d', '--dry', 'Dry run - print results, but perform no actual operations.') do |setting| options[:dry_run] = setting end opts.on('-f', '--force', 'Forces removal of files, bypassing prompt. USE WITH CAUTION.') do |setting| options[:force] = setting end opts.on('-p', '--find-path', 'Output homebrew location if found, then exit.') do |setting| options[:find_path] = setting options[:quiet] = true end opts.on('-h', '--help', '--usage', 'Display usage info and quit.') { puts opts; exit } end optparser.parse! $quiet = options[:quiet] # provides access to option value within methods # Files installed into the Homebrew repository BREW_LOCAL_FILES = %w[ .git Cellar Library/brew.rb Library/Homebrew Library/Aliases Library/Formula Library/Contributions Library/LinkedKegs ] # Files that Homebrew installs into other system locations BREW_SYSTEM_FILES = %W[ #{ENV['HOME']}/Library/Caches/Homebrew #{ENV['HOME']}/Library/Logs/Homebrew /Library/Caches/Homebrew ] $files = [] # This function runs given command in a sub-shell, expecting the output to be the # path of a Homebrew installation. If given a block, it passes the shell output to # the block for processing, using the return value of the block as the new path. # Known Homebrew files are then scanned for and added to the file list. Then the # directory is tested for a Homebrew installation, and the git index is added if # a valid repo is found. The function won't run once a Homebrew installation is # found, but it will accumulate untracked Homebrew files each invocation. # # @param [String] cmd a shell command to run # @param [String] error_msg message to print if command fails # def locate_brew_path(cmd, error_msg = 'check homebrew installation and PATH.') return if $brew_location # stop testing if we find a valid Homebrew installation puts "Searching for homewbrew installation using '#{cmd}'..." unless $quiet # Run given shell command along with any code passed-in via block path = `#{cmd}`.chomp path = yield(path) if block_given? # pass command output to your own fancy code block begin Dir.chdir(path) do # Search for known Homebrew files and folders, regardless of git presence $files += BREW_LOCAL_FILES.select { |file| File.exist? file }.map {|file| File.expand_path file } $files += Dir.glob('**/{man,bin}/**/brew*') # Test for Homebrew git repository (use popen3 so we can suppress git error output) 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 # on normal errors, continue program return end end # Attempt to locate homebrew installation using a command and optional code block # for processing the command results. Locating a valid path halts searching. 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 # Found Homebrew installation if $brew_location puts "Homebrew found at: #{$brew_location}" unless options[:quiet] if options[:find_path] puts $brew_location exit end # Collect files indexed by git begin Dir.chdir($brew_location) do # Update file list (use popen3 so we can suppress git error output) 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 # Report any errors, but continue the script and collect any last files end end # Collect any files Homebrew may have installed throughout our system $files += BREW_SYSTEM_FILES.select { |file| File.exist? file } abort 'Failed to locate any homebrew files!' if $files.empty? # DESTROY! DESTROY! DESTROY! unless options[:force] print "Delete #{$files.count} files? " abort unless gets.rstrip =~ /y|yes/i end rm = if options[:dry_run] lambda { |entry| puts "deleting #{entry}" unless options[:quiet] } else lambda { |entry| FileUtils.rm_rf(entry, :verbose => options[:verbose]) } end puts 'Deleting files...' unless options[:quiet] $files.each(&rm)