Можно ли оценить выражение в массиве ProgramArguments launchd?

У меня есть ~/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-файл так, чтобы выражение оценивалось, а не обрабатывалось как буквальное значение? И если да, то как?

1 ответ

Решение

Как вы обнаружили, <string> записи передаются как строковые литералы, но $(/usr/libexec/java_home -v1.8) является выражением оболочки bash Согласно документации по launchd.plist, 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>
Другие вопросы по тегам