Làm thế nào tôi có thể loại bỏ Homebrew một cách sạch sẽ. Tôi có thể có một cài đặt cũ bị lỗi, và tôi muốn có một khởi đầu mới.
Làm thế nào tôi có thể loại bỏ Homebrew một cách sạch sẽ. Tôi có thể có một cài đặt cũ bị lỗi, và tôi muốn có một khởi đầu mới.
Câu trả lời:
Điều này rm -rf
sẽ không hỏi bạn có chắc chắn khi bạn xóa hay không, vì vậy hãy chắc chắn rằng cd
lệnh này hoạt động để đưa bạn ra khỏi / tmp (việc đưa cd /tmp
bạn đến nơi an toàn trong trường hợp bạn sao chép / dán mọi thứ trong một lần để bạn không xóa các tệp từ thư mục hiện tại của bạn)
Hãy thử điều này trong Terminal của bạn:
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
Thông tin thêm về chủ đề này có thể được tìm thấy trong Câu hỏi thường gặp về Homebrew .
cd `brew --prefix`
thư mục mà bạn không có tệp git bình thường được kiểm tra vì thiết lập cũ / trục trặc có thể không thành công và việc xóa git ls-files
có thể xóa một cái gì đó ngoài phần còn lại của bia của bạn.
Mặc dù cài đặt của HomeBrew được đặt nổi bật trên trang nhất của nó, nhưng chi tiết thì không.
https://brew.sh/
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Trong một thời gian dài, rất khó để tìm thấy một gỡ cài đặt đáng tin cậy. Bây giờ, một vài lần nhấp chuột trong tài liệu, giờ đây đã có một phương thức chính thức:
https://docs.brew.sh/FAQ
Để gỡ cài đặt Homebrew, dán lệnh bên dưới vào dấu nhắc thiết bị đầu cuối.
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
Đây là một giải pháp tốt hơn để xóa 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)