Utiliser une variable d'environnement dans un script launchd


21

Je suis curieux de savoir s'il est possible de spécifier une variable d'environnement dans la ProgramArgumentspartie d'un script luanchd sur 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>

Réponses:


16

Pas dans la clé ProgramArguments. Vous devez ajouter une EnvironmentVariablesclé dans le dict de votre plist comme ceci:

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

Voir: Créer des démons et des agents de lancement .


3
Bien sûr, vous pouvez coder en dur votre env. vars dans le plist, mais vous ne pouvez pas utiliser les vars existants comme $ HOME. À moins que ce ne soit qu'un argument pour un script shell, auquel cas le shell (pas launchd), le développera. Mais dans cet exemple, cela pourrait réellement fonctionner si vous ajoutez l' -coption à / bin / sh?
mivk

3

Je ne pense pas que launchd connaisse l'environnement nativement, du moins pas en tant que substitutions $ {VARIABLE}.

Rien ne vous empêche de lancer un script shell (ou un shell avec -c) comme action launchd, et cela aurait un environnement et respecterait $ {VARIABLES} - Soyez conscient de la différence entre les démons / agents système et utilisateur dans ce cas bien que...


1

Je ne suis pas sûr - je ne l'ai pas essayé auparavant ... mais je peux vous dire que si la seule variable qui vous intéresse est à la maison - vous pouvez utiliser ~.

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

1
Ça ne marche pas. Je reçois"/bin/sh: ~/bin/attach-devroot.sh: No such file or directory"
matpie

Cela ne fonctionne que si l' EnableGlobbingindicateur est défini sur true. Voir la page de manuel launchd.plist .
sakra

2
EnableGlobbingn'est plus pris en charge
Liviu
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.