对于 CI 任务,我需要在不存在某些 Homebrew 软件包的环境中运行命令(在我的例子中,
[email protected]
、openssl@3
和 readline
)。这些软件包预安装在我使用的 Github CI 运行程序中,许多其他预安装的软件包都依赖于它们。
虽然我可以使用
brew uninstall --ignore-dependencies
,但这会破坏所有依赖包,如果碰巧涉及其中任何一个,这将破坏我的 CI 工作。虽然我也可以追踪它,但这并不是面向未来的。
因此,我宁愿递归地卸载上述软件包以及依赖于它们的所有内容(实际上,与卸载/删除 Homebrew 软件包(包括其所有依赖项)相反)。
似乎没有内置的brew
子命令。因为我可能不是第一个执行此任务的人 - 也许有一个 Homebrew 插件命令?我没找到。
brew-uninstall-cascade.sh
”:
#!/bin/bash
declare -a packages rdepends
packages=("$@")
# have to try one by one, otherwise `brew uses` would only print
# packages that require them all rather than any of them
for package in "${packages[@]}"; do
rdepends+=($(brew uses --installed --include-build --include-test --include-optional --recursive "$package"))
done
brew uninstall "${packages[@]}" "${rdepends[@]}"