Використовуйте змінну середовища в сценарії запуску


21

Мені цікаво, чи можна вказати змінну ProgramArgumentsоточення в частині сценарію luanchd на Mac OS X Leopard.

<?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>me.mpietz.MountDevRoot</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>

        <string>$HOME/bin/attach-devroot.sh</string>

        <!-- Instead of using...
        <string>/Users/mpietz/bin/attach-devroot.sh</string -->
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Відповіді:


16

Не в ключі ProgramArguments. Вам потрібно додати EnvironmentVariablesключ у вислів вашого плейста так:

<?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>EnvironmentVariables</key>
    <dict>
           <key>AN_ENVIRONMENT_VARIABLE_NAME</key>
           <string>the_value</string>
    </dict>
    <key>Label</key>
    <string>me.mpietz.MountDevRoot</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>

        <string>$HOME/bin/attach-devroot.sh</string>

        <!-- Instead of using...
        <string>/Users/mpietz/bin/attach-devroot.sh</string -->
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Див.: Створення демонів і агентів запуску .


3
Звичайно, ви можете жорстко кодувати свою екологію. vars в plist, але ви не можете використовувати існуючі vars на зразок $ HOME. Якщо тільки це аргумент скрипту оболонки, в цьому випадку оболонка (не запущена) розширить її. Але в цьому прикладі це може дійсно спрацювати, якщо ви додасте -cопцію в / bin / sh?
mivk

3

Я не думаю, що ланцюг знає про навколишнє середовище спочатку, принаймні, не як $ {VARIABLE} замін.

Ніщо не заважає вам запустити скрипт оболонки (або оболонку з -c) як вашу операцію запуску , і це матиме середовище і поважайте $ {VARIABLES} - Будьте в курсі різниці між демонами / агентами системи та користувачами в цьому випадку хоча ...


1

Я не впевнений - я не пробував цього раніше ... але я можу вам сказати, що якщо єдина зміна, про яку ви дбаєте, - це домашня сторінка - ви можете використовувати ~.

So: <string>~/bin/attach-devroot.sh</string>

1
Це не працює. Я отримую"/bin/sh: ~/bin/attach-devroot.sh: No such file or directory"
матір

Це працює лише в тому випадку, якщо для EnableGlobbingпрапора встановлено значення true. Див. Сторінку "startd.plist ".
сакра

2
EnableGlobbingбільше не підтримується
Liviu
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.