我有类似的想法,因为我想将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
。plist
可以使用PlistBuddy
(/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
}
wheredocumentRoot
和serverName
是每个虚拟主机所需的主要值。如果您希望输出采用 xml plist 的形式,请添加以下-x
选项:
/usr/libexec/PlistBuddy -x -c Print ~/Library/Preferences/de.appsolute.mamppro.plist
上面的单个记录是具有以下结构的数组中的许多记录之一:
virtualHosts = Array { Dict { ...Virtual Host 1 值... } Dict { ...Virtual Host 2 值... } Dict { ...etc... } }
上面的命令吐出整个plist
文件。单独使用手册页很难找出如何专注于virtualHosts
数组或说出数组中的第二个Dict
(记录)virtualHosts
。感谢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
打印documentRoot
第五条virtualHosts
记录:
PlistBuddy -c "Print :virtualHosts:5:documentRoot" ~/Library/Preferences/de.appsolute.mamppro.plist
根据man
页面PlistBuddy -c Add entry type [value]
将为您解决问题(即添加/写入所需的记录),因此您可以通过将上述信息与手册页和链接相结合来解决您的问题(如果您想制作脚本,该链接很有用)。
我还没有完成我的自动化脚本(drush
代码php
或bash
脚本是我的偏好),但我认为以下几点会对您有所帮助:
首先,如果您正在做任何测试,请确保您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
是 previews 命令输出的行号(因为数组的索引从 0 开始)。
当然,您必须对所有条目(等)重复此操作,以FollowSymLinks
确保serverName
尊重结构和类型(您在单个Dict
条目中有数组、整数和字符串)。最后但同样重要的是,必须重新启动 MAMP Pro(或至少服务器)才能使更改~/Library/Preferences/de.appsolute.mamppro.plist
生效。再次备份你的plist
文件!!!
我希望这可以帮助您制作您想要的脚本。