drush(サイトを管理するためのコマンドラインツールdrupal)をMAMPおよびMAMP Proと統合し、テスト用の仮想ホストの作成を自動化できるようにしたかったので、私は同様の考えを持っていました。
MAMP Proに手動で追加した情報はファイルに保存され、テンプレートファイルに基づいてファイルを~/Library/Preferences/de.appsolute.mamppro.plist変更/作成するために使用されます。実際には、テンプレートファイルはに保存され、生成されたファイルはに保存されます(このフォルダと同様にチェックしてください)。/etc/hostshttpd.conf~/Library/Application Support/appsolute/MAMP PRO/templatesLibrary/Application Support/appsolute/MAMP PRO/httpd.confhosts
手動で変更を保存して再起動するたびに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
}
ここでdocumentRoot、およびserverNameは各仮想ホストに必要な主な値です。出力をxmlplistの形式にする場合は、次の-xオプションを追加します。
/usr/libexec/PlistBuddy -x -c Print ~/Library/Preferences/de.appsolute.mamppro.plist
上記の単一のレコードは、次の構造を持つ配列内の多くのレコードの1つです。
virtualHosts = Array {Dict {... VirtualHost1の値...}Dict{... VirtualHost2の値...}Dict{... etc ...}}
上記のコマンドはファイル全体を吐き出しplistます。マニュアルページだけを使用して、配列に焦点を当てる方法や、配列の2番目(レコード)をvirtualHosts言う方法を見つけるのは長い苦痛でした。Plistの操作に関するこのページのおかげで、私はそれを正しく理解しました(次のコマンドではその部分をスキップします)。配列全体にアクセスするには、次のコマンドを使用します。DictvirtualHosts/usr/libexec/virtualHosts
PlistBuddy -c "Print :virtualHosts" ~/Library/Preferences/de.appsolute.mamppro.plist
2番目のレコードを印刷するには:
PlistBuddy -c "Print :virtualHosts:2" ~/Library/Preferences/de.appsolute.mamppro.plist
documentRoot5番目の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で、はプレビューコマンドから出力される行番号です(配列のインデックスは0で始まるため)。
もちろん、構造とタイプを尊重していることを確認して、すべてのエントリ(など)に対してこれを繰り返す必要があります(FollowSymLinks単一serverNameのエントリに配列と整数と文字列がありますDict)。最後になりましたが、変更を有効にするには、MAMP Pro(または少なくともサーバー)を再起動する必要があります~/Library/Preferences/de.appsolute.mamppro.plist。もう一度plistファイルをバックアップしてください!!!
これが、必要なスクリプトの作成に役立つことを願っています。