我想将我的macos brew配置复制到多台机器上。
有没有办法以编程方式检查brew的状态,或者让它生成一组命令以使状态与另一台机器同步?
更新:似乎没有任何东西,所以我整理了一个快速包。到目前为止,它对我来说效果很好。
https://github.com/marhar/brewmaster
答案 0 :(得分:1)
好问题!!!!
不确定是否有"正确的" 方法可以做到这一点,但这也是我想做的事情,以保持我的笔记本电脑的Homebrew与之同步我的桌面。我开始写一些东西,以便拥有export settings
命令和import settings
命令,并在两台机器之间保存Dropbox中的设置。
我可以列出所有已安装的软件包并迭代它们,然后获取用于安装每个特定软件包的选项 - 我使用JSON输出和jq
home-brew软件包来解析选项。
然后我遇到了问题......
1)当您在第二台计算机上安装时,存在依赖关系,有时home-brew会为您安装依赖项,但它会使用默认选项安装它,除非您首先使用正确的选项安装它。解决这个问题的一种方法是使用选项强制重新安装包列表中的内容,即使它们由于安装了以前的包而已经安装在默认状态。
2)第二个问题是在某个版本固定的pinned
个软件包。这开始让我大吃一惊,我放弃了,因为我并不担心笔记本电脑上的设置不同。
FWIW,这里是我开始写的代码的骨头 - 它是不完整的,可能是错的,但它可能会让你或其他人为你滚动。
first=1
# Start output file with array so we can use map()
echo "[" > "$f"
# Iterate over all installed packages
for pkg in $(brew list); do
[ $first -ne 1 ] && echo "," >> "$f"
[ $verbose -gt 0 ] && echo Processing package: $pkg
# Find options used for this package
options=$(brew info --json=v1 $pkg | jq '.[].installed[0].used_options')
echo "{\"name\":\"$pkg\",\"used_options\":$options}" >> "$f"
first=0
done
# Close array in output file
echo "]" >> "$f"
一个有用的信息是有一个名为" INSTALL_RECEIPT.json"的可解析文件。在每个安装的包中,它告诉你很多有用的东西......
find /usr/local -name "INSTALL_RECEIPT*"
以下是我用来解析它们的其他一些片段
# List package names
#jq -r '.packages[] | .["package-name"]' < *json
# List options for package "imagemagick"
#jq -r '.packages[] | select(."package-name"=="imagemagick") | .options[]' < *json
答案 1 :(得分:1)
在同步安装方面可能不完全是您正在寻找的内容,但您应该查看Brewfiles和Bundler:https://github.com/Homebrew/homebrew-bundle