Use una variable de entorno en un script de launchd


21

Tengo curiosidad por saber si es posible especificar una variable de entorno en la ProgramArgumentsparte de un script luanchd en 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>

Respuestas:


16

No está en la clave ProgramArguments. EnvironmentVariablesDebe agregar una clave al dict de su plist de la siguiente manera:

<?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: Creación de demonios de lanzamiento y agentes .


3
Claro, puedes codificar tu env. vars en la lista, pero no puede usar vars existentes como $ HOME. A menos que sea solo un argumento para un script de shell, en cuyo caso el shell (no lanzado) lo expandirá. Pero en este ejemplo, ¿podría funcionar si agrega la -copción a / bin / sh?
mivk

3

No creo que launchd conozca el entorno de forma nativa, al menos no como sustituciones de $ {VARIABLE}.

Sin -cembargo, no hay nada que le impida iniciar un script de shell (o un shell con ) como su acción de lanzamiento , y eso tendría un entorno y respeto $ {VARIABLES} - Tenga en cuenta la diferencia entre los demonios / agentes del sistema y del usuario en ese caso aunque...


1

No estoy seguro, no lo he probado antes ... pero puedo decirte que si la única variable que te importa es el hogar, puedes usar ~.

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

1
Esto no funciona Me sale"/bin/sh: ~/bin/attach-devroot.sh: No such file or directory"
matpie

Esto solo funciona si el EnableGlobbingindicador se establece en verdadero. Consulte la página del comando man launchd.plist .
sakra

2
EnableGlobbingya no es compatible
Liviu
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.