Utilizzare una variabile di ambiente in uno script launchd


21

Sono curioso ProgramArgumentsdi sapere se è possibile specificare una variabile di potenziamento nella parte di uno script luanchd su 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>

Risposte:


16

Non nella chiave ProgramArguments. Devi aggiungere una EnvironmentVariableschiave nel dict del tuo plist in questo modo:

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

Vedi: Creazione di demoni e agenti di lancio .


3
Certo, puoi codificare il tuo env. varia nella lista, ma non puoi usare le variabili esistenti come $ HOME. A meno che non sia solo un argomento per uno script di shell, nel qual caso la shell (non avviata) lo espanderà. Ma in questo esempio, potrebbe effettivamente funzionare se aggiungi l' -copzione a / bin / sh?
mivk

3

Non credo che launchd conosca l'ambiente in modo nativo, almeno non come sostituzioni $ {VARIABLE}.

Non c'è nulla che ti impedisca di lanciare uno script di shell (o una shell con -c) come azione di avvio , e che avrebbe un ambiente e rispetterebbe $ {VARIABLES} - In questo caso, fai attenzione alla differenza tra demoni / agenti di sistema e utente anche se...


1

Non sono sicuro - non l'ho mai provato prima ... ma posso dirti che se l'unica variabile che ti interessa è casa - puoi usare ~.

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

1
Questo non funziona Ricevo"/bin/sh: ~/bin/attach-devroot.sh: No such file or directory"
matpie il

Funziona solo se il EnableGlobbingflag è impostato su true. Vedi la pagina man launchd.plist .
Sakra,

2
EnableGlobbingnon più supportato
Liviu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.