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>
matpie
la source

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 .

Joe Block
la source
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...

voretaq7
la source
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>
Dave Holland
la source
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