Macos 自制:以编程方式复制安装?

Macos 自制:以编程方式复制安装?,macos,homebrew,Macos,Homebrew,我想将macos brew配置复制到多台机器上 有没有办法以编程方式检查brew的状态,或者让它生成一组命令以与另一台机器同步状态 更新:似乎什么都没有,所以我准备了一个快速的包来实现这一点。到目前为止,它对我很有效 https://github.com/marhar/brewmaster https://github.com/marhar/brewmaster 好问题 我不确定是否有一种“正确”的方法可以做到这一点,但我也想做的是让我的笔记本电脑的自制软件与我的桌面同步。我开始写一些东西,

我想将macos brew配置复制到多台机器上

有没有办法以编程方式检查brew的状态,或者让它生成一组命令以与另一台机器同步状态

更新:似乎什么都没有,所以我准备了一个快速的包来实现这一点。到目前为止,它对我很有效

https://github.com/marhar/brewmaster
https://github.com/marhar/brewmaster
好问题

我不确定是否有一种“正确”的方法可以做到这一点,但我也想做的是让我的笔记本电脑的自制软件与我的桌面同步。我开始写一些东西,希望有一个
导出设置
命令和一个
导入设置
命令,并将设置保存在两台机器之间的Dropbox中

我可以列出所有已安装的软件包并对其进行迭代,然后获得用于安装每个特定软件包的选项-我使用JSON输出和
jq
home brew软件包解析选项

然后我遇到了一些问题

1) 当您在第二台计算机上安装时,会存在依赖项,有时home brew会为您安装依赖项,但它会使用默认选项进行安装,除非您首先使用正确的选项进行安装。解决此问题的一种方法是使用选项强制重新安装软件包列表中的内容,即使这些内容由于安装了以前的软件包而已以默认状态安装

2) 第二个问题是固定在特定版本的
程序包。这让我大吃一惊,我放弃了,因为我不太担心笔记本电脑上的不同设置

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_receive.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
#列出软件包名称
#jq-r'.packages[]|.[package name]'<*json
#列出包“imagemagick”的选项
#jq-r'.packages[]|选择(“.packages name”==“imagemagick”)|。选项[]'<*json

在同步安装方面,可能并不完全是您想要的,但您应该查看Brewfiles和Bundler:

这里有一个简单的软件包,它可以在多台机器上运行brew,将它们同步,以便它们拥有相同的安装软件包。我还添加了对字体同步的支持