Frage Verwenden Sie eine Umgebungsvariable in einem Launchd-Skript


Ich bin gespannt, ob es möglich ist, eine Umgebungsvariable in der ProgramArguments Teil eines luanchd-Skripts unter 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>

21
2018-02-10 01:08


Ursprung




Antworten:


Nicht im Schlüssel ProgramArguments. Sie müssen ein hinzufügen EnvironmentVariables Geben Sie das Diktat Ihres Plist so ein:

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

Sehen: Erstellen von Startdämonen und -agenten.


15
2018-04-02 05:34



Sicher, Sie können Ihr env fest codieren. Vars im Plist, aber Sie können nicht vorhandene Vars wie $ HOME verwenden. Sofern es sich nicht nur um ein Shell-Skript handelt, wird die Shell (nicht launchd) erweitert. Aber in diesem Beispiel könnte es tatsächlich funktionieren, wenn Sie das hinzufügen -c Option zu / bin / sh? - mivk


Ich denke nicht, dass Launchd nativ von der Umgebung weiß, zumindest nicht als $ {VARIABLE} -Substitutionen.

Es gibt nichts, was Sie davon abhält, ein Shell-Skript (oder eine Shell mit -c) als Ihre launchd-Aktion, und das würde eine Umgebung haben und Respekt $ {VARIABLES} - Beachten Sie den Unterschied zwischen System und Benutzer Daemons / Agenten in diesem Fall aber ...


2
2018-02-10 03:47





Ich bin mir nicht sicher - ich habe es vorher noch nicht versucht ... aber ich kann dir sagen, dass, wenn die einzige Variable, die dir wichtig ist, zu Hause ist - du kannst ~ verwenden.

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

1
2018-02-10 03:29



Dies funktioniert nicht. Ich bekomme "/bin/sh: ~/bin/attach-devroot.sh: No such file or directory" - matpie
Dies funktioniert nur, wenn die EnableGlobbing Flag wird auf "Wahr" gesetzt. Siehe die launchd.plist Man Seite. - sakra
EnableGlobbing wird nicht mehr unterstützt - Liviu