Как получить доступ к переменным среды в файле launchd plist

У меня есть агент launchd для каждого пользователя. В этом .plist я хотел бы использовать переменную среды $HOME.

Является ли это возможным?

(это клавиша «Программа», которую я хотел бы определить как «$ HOME/bin/myscript»)


person mivk    schedule 25.05.2012    source источник


Ответы (2)


launchd не выполняет никаких замен значений в своих списках .plist, поэтому это невозможно сделать в той форме, в которой вы пытаетесь это сделать. Что вы можете сделать, так это передать команду, которую вы хотите запустить, в оболочку, и пусть она выполнит подстановку переменных и запустит команду. Например, вы можете заменить этот ключ Program следующим:

<key>ProgramArguments</key>
<array>
    <string>/bin/sh</string>
    <string>-c</string>
    <string>exec $HOME/tmp/myscript</string>
</array>

(Обратите внимание, что префикс exec на самом деле не нужен, это всего лишь незначительная оптимизация. Он заставляет оболочку заменить себя скриптом, а не запускать скрипт как подпроцесс, а затем ждать его завершения.)

person Gordon Davisson    schedule 25.05.2012

EnableGlobbing включает расширение с помощью тильды и подстановочных знаков для ProgramArguments (но не для Program).

<key>EnableGlobbing</key>
<true/>
<key>ProgramArguments</key>
<array>
    <string>~/bin/myscript</string>
</array>

ProgramArguments может быть только массивом строк, а не просто строкой. Расширение тильды также работает в WatchPaths по умолчанию.

person Lri    schedule 24.04.2013