Как получить файл из launchctl - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь source файл из launch agent, но неясно, как это сделать (или если это вообще возможно).Я знаю, что легко setenv для отдельных переменных, но мне нужно ввести их несколько, так что source - это то, что мне нужно.

<?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>my.sourcerer</string>
    <key>ProgramArguments</key>
    <array>
        <string>source</string>
        <string>my_file.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>WorkingDirectory</key>
    <string>/path/to/source</string>
</dict>
</plist>

Это загружается и запускается без проблем, кажется:

$ launchctl load ~/Library/LaunchAgents/my.sourcerer.plist
$ launchctl start ~/Library/LaunchAgents/my.sourcerer.plist

Но когда я printenv, ни одна из переменных моего окружения не появляется.Если вручную я делаю:

$ source /path/to/source/my_file.sh
$ printenv

Тогда все переменные отображаются.Почему агент launchctl не загружает переменные в мою среду?

1 Ответ

1 голос
/ 23 марта 2019

Исходя из комментариев к вопросу, я собираюсь выйти на конечность и попытаться ответить на вопрос.

Кажется, вы хотите запустить программу при входе в систему, а не вручную после открытияваш первый терминальный сеансРешение состоит в том, чтобы создать сценарий, который включает необходимую команду source для инициализации среды.Затем сделайте этот путь к сценарию первым аргументом вашего ~ / Library / LaunchAgents / my.sourcerer.plist config.

Вы также можете статически установить эти переменные с помощью launchctl setenv.Но я бы не рекомендовал такой подход, потому что он явно не динамический.То есть, если выходные данные скрипта source d когда-либо изменят статически установленные переменные env, унаследованные каждым процессом, не изменится. Jj

...