我最近遇到一个问题,我的所有链接二进制文件都从 中删除了/usr/local/bin/
。幸运的是,其中大多数只是使用 Homebrew 安装的二进制文件的动态链接,因此在重新安装 Homebrew 后,我需要将它们恢复。有没有办法强制使用 Homebrew 重新安装所有已安装的软件包和二进制文件?也许将 的输出通过管道传输brew list
到brew reinstall
?
答案1
就这么简单:
$ brew list | xargs brew reinstall
您不需要卸载任何东西,因为这样做可能会丢失您的设置和配置。
答案2
不仅可以保留已安装的 brews,还可以桶和水龙头我建议
$ brew bundle dump --describe --global
$ brew bundle install --global
第一个命令将写入~/.Brewfile
,并在第二个调用中再次读取。它看起来像这样:
$ cat ~/.Brewfile
tap "buo/cask-upgrade"
tap "homebrew/cask-fonts"
brew "direnv"
brew "python"
cask "0xed"
cask "alacritty"
请发出
$ brew bundle -h
为了更多细节在bundle
命令上。
答案3
升级到 OSX High Sierra 后,我遇到了这个需求。大多数 brew 包都因缺少 dylib 而失败。最后我编写了一个快速而粗糙的脚本,可以一次干净地删除和替换一个,忽略依赖项,这样您就不会强制批量清除。您需要修复每个停止点,但它会从停止的地方继续,所以不会太痛苦。
一如既往,YMMV
#!/bin/bash -e
if [ "$1" == "-h" ] ; then
cat <<EOT
Remove & reinstall all brew owned packages
Fail on error to allow manual fixing
Accept package name as arg1 to spec pick up point.
$0 [<pickup point>]
eg:
$0
or
$0 ctags
where <ctags> is the package to start from
EOT
exit 1
fi
for l in $(brew list) ; do
if [ "$1" ] ; then
if [[ $l < $1 ]] ; then
echo "skipping $l"
continue
fi
fi
echo "Remove $l"
brew uninstall --ignore-dependencies $l
echo "Re-add $l"
brew install $l
done
答案4
就像是
cd /tmp
brew list -1 >brew-list
# do whatever is necessary to remove packages
while read package; do
brew install $package
done <brew-list
应该可以解决问题(除非您已经从水龙头安装,那么可能还需要做更多的工作)。