我有类似的想法,因为我想将drush(一个用于管理drupal 站点的命令行工具)与 MAMP 和 MAMP Pro 集成,并可以自动创建用于测试的虚拟主机。
您手动添加到 MAMP Pro 的信息将存储在文件 ~/Library/Preferences/de.appsolute.mamppro.plist 中,然后用于修改/创建基于模板文件的 /etc/hosts 和 httpd.conf 文件。实际上模板文件存储在~/Library/Application Support/appsolute/MAMP PRO/templates,生成的文件存储在Library/Application Support/appsolute/MAMP PRO/(检查httpd.conf以及hosts在这个文件夹中)。
无论如何编辑这些文件是没有意义的,因为每次您保存手动修改并重新启动时它们都是由 MAMP 生成的(还没有调查它的详细信息,但我记得当我尝试手动编辑这些文件时没有希望)。
你需要做的是直接编辑plist文件de.appsolute.mamppro.plist。可以使用PlistBuddy 实现对plist 文件的读写(/usr/libexec/PlistBuddy 参见man PlistBuddy)。
您可以使用以下命令提取plist文件中的信息:
/usr/libexec/PlistBuddy -c Print ~/Library/Preferences/de.appsolute.mamppro.plist
使用此命令的虚拟主机的典型(单个)记录如下所示:
Dict {
MultiViews = false
documentRoot = /home/test/openpublish-2.3
Order = 0
ExecCGI = false
serverAliases = Array {
}
dyndns = Dict {
displayName = -
}
serverName = openpublish-2.3
FollowSymLinks = true
AllowOverride = 0
local = true
Allow = 0
Includes = true
Indexes = false
SymLinksifOwnerMatch = false
}
其中documentRoot 和serverName 是每个虚拟主机所需的主要值。
如果您希望输出采用 xml plist 的形式,请添加 -x 选项:
/usr/libexec/PlistBuddy -x -c Print ~/Library/Preferences/de.appsolute.mamppro.plist
上面的单个记录是具有以下结构的数组中的许多记录之一:
虚拟主机 = 数组 {
字典{
...虚拟主机 1 值...
}
字典{
...虚拟主机 2 值...
}
字典{
...等等...
}
}
上面的命令吐出了整个plist 文件。单独使用手册页很难找出如何关注virtualHosts 数组或说virtualHosts 数组中的第二个Dict(记录)。感谢this page on Manipulating Plists 我明白了(在以下命令中,我跳过了/usr/libexec/ 部分)正确:
要访问整个 virtualHosts 数组,请使用以下命令:
PlistBuddy -c "Print :virtualHosts" ~/Library/Preferences/de.appsolute.mamppro.plist
打印第二条记录:
PlistBuddy -c "Print :virtualHosts:2" ~/Library/Preferences/de.appsolute.mamppro.plist
打印第五条virtualHosts记录的documentRoot:
PlistBuddy -c "Print :virtualHosts:5:documentRoot" ~/Library/Preferences/de.appsolute.mamppro.plist
根据man 页面PlistBuddy -c Add entry type [value] 将为您解决问题(即添加/写入所需的记录),因此您的问题可以通过将上述信息与手册页和链接相结合来解决(链接是如果你想制作一个脚本很有用)。
我还没有完成我的自动化脚本(php 或bashscript 中的drush 代码是我的偏好)但我认为以下几点会对您有所帮助:
首先,如果您要进行任何测试,请确保先备份 de.appsolute.mamppro.plist,或者复制此文件并在副本上执行所有测试。因此,在下面我假设您在终端上,并且您已经为命令设置了别名并复制了plist 文件,如下所示:
$ alias PlistBuddy="/usr/libexec/PlistBuddy"
$ cp ~/Library/Preferences/de.appsolute.mamppro.plist safe_to_play.plist
添加一个新的Dict 到virtualHosts 数组:
PlistBuddy -c "Add :virtualHosts: dict" safe_to_play.plist
要找到新虚拟主机条目的索引,然后执行类似(bash 脚本假定):
PlistBuddy -c "Print :virtualHosts: dict" safe_to_play.plist | grep documentRoot | wc -l
并为此新记录添加 documentRoot 条目:
PlistBuddy -c "Add :virtualHosts:XXX:documentRoot string /home/path" safe_to_play.plist
其中XXX 是预览命令输出的行号(因为数组的索引从 0 开始)。
当然,您必须对所有条目(FollowSymLinks、serverName 等)重复此操作,确保尊重结构和类型(您在单个 Dict 条目中有数组、整数和字符串)。最后但并非最不重要的一点是,必须重新启动 MAMP Pro(或至少服务器)才能使 ~/Library/Preferences/de.appsolute.mamppro.plist 中的更改生效。再次备份您的plist 文件!!!
我希望这可以帮助您制作您想要的脚本。