4

次のような呼び出し~/Library/LaunchAgents/setenv.JAVA_HOME.plistを含むファイルがあります。/bin/launchctl

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>setenv.JAVA_HOME</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/launchctl</string>
        <string>setenv</string>
        <string>JAVA_HOME</string>
        <string>$(/usr/libexec/java_home -v1.8)</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
</dict>
</plist>

問題は、$(/usr/libexec/java_home -v1.8)式が評価されず、代わりにJAVA_HOME環境変数にリテラル値が割り当てられることです$(/usr/libexec/java_home -v1.8)

質問: 式が評価され、リテラル値として扱われないように、plist ファイルを構成することは可能ですか? もしそうなら、どのように?

4

1 に答える 1

5

ご存じのとおり、<string>エントリは文字列リテラルとして渡されますが、これ$(/usr/libexec/java_home -v1.8)は bash シェル式です。launchd.plist documentationによると、ProgramArguments文字列の配列のみを受け取るため、引数を式としてマークする方法はないようです。

ただし、簡単な解決策は/bin/bash、引数を指定して実行し-c、その後に実行するコマンドラインを指定することだと思います。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>test.so</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/bash</string>
        <string>-c</string>
        <string>/bin/launchctl setenv JAVA_HOME $(/usr/libexec/java_home -v1.8)</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
</dict>
</plist>
于 2016-02-01T17:46:05.147 に答える