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>
matpie
fuente

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 .

Joe Block
fuente
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...

voretaq7
fuente
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>
Dave Holland
fuente
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