Use uma variável de ambiente em um script launchd

21

Estou curioso para ProgramArgumentssaber se é possível especificar uma variável de ambiente na parte de um script luanchd no 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>
matpie
fonte

Respostas:

16

Não na chave ProgramArguments. Você precisa adicionar uma EnvironmentVariableschave no ditado do seu plist da seguinte maneira:

<?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>

Consulte: Criando daemons e agentes de inicialização .

Joe Block
fonte
3
Claro, você pode codificar seu env. vars na lista, mas você não pode usar os vars existentes como $ HOME. A menos que seja apenas um argumento para um script de shell, nesse caso, o shell (não o launchd) o expandirá. Mas neste exemplo, pode realmente funcionar se você adicionar a -copção a / bin / sh?
22412 mivk
3

Não acho que o launchd conheça o ambiente de forma nativa, pelo menos não como substituições de $ {VARIABLE}.

Não há nada que o impeça de iniciar um script de shell (ou um shell com -c) como sua ação launchd, e isso teria um ambiente e respeito $ {VARIABLES} - Esteja ciente da diferença entre os daemons / agentes do sistema e do usuário nesse caso Apesar...

voretaq7
fonte
1

Não tenho certeza - nunca tentei antes ... mas posso lhe dizer que, se a única variável de sua preferência for a sua casa - você poderá usar ~.

So: <string>~/bin/attach-devroot.sh</string>
Dave Holland
fonte
1
Isso não funciona. Eu recebo"/bin/sh: ~/bin/attach-devroot.sh: No such file or directory"
matpie
Isso funciona apenas se o EnableGlobbingsinalizador estiver definido como verdadeiro. Consulte a página do manual launchd.plist .
Sakra
2
EnableGlobbingnão é mais suportado
Liviu