Użyj zmiennej środowiskowej w uruchomionym skrypcie

21

Jestem ciekawy, czy można określić zmienną envrionment w ProgramArgumentsczęści skryptu luanchd w 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
źródło

Odpowiedzi:

16

Nie w kluczu ProgramArguments. Musisz dodać EnvironmentVariablesklucz do dyktatora swojej listy w następujący sposób:

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

Zobacz: Tworzenie demonów i agentów uruchamiania .

Joe Block
źródło
3
Jasne, możesz mocno zakodować swoją env. zmienne w liście, ale nie można używać istniejących zmiennych, takich jak $ HOME. Chyba że jest to tylko argument do skryptu powłoki, w którym to przypadku powłoka (nie uruchomiona) ją rozszerzy. Ale w tym przykładzie może faktycznie działać, jeśli dodasz -copcję do / bin / sh?
mivk
3

Nie sądzę, aby uruchomiona wiedziała o środowisku natywnie, przynajmniej nie jako podstawienia $ {VARIABLE}.

Nic nie stoi na przeszkodzie, abyś uruchomił skrypt powłoki (lub powłokę -c) podczas działania uruchomionego, a to miałoby środowisko i szanowałoby $ {ZMIENNE} - W takim przypadku pamiętaj o różnicy między demonami / agentami Systemu i Użytkownika. chociaż...

voretaq7
źródło
1

Nie jestem pewien - nie próbowałem tego wcześniej ... ale mogę ci powiedzieć, że jeśli jedyną zmienną, na której ci zależy, jest dom - możesz użyć ~.

So: <string>~/bin/attach-devroot.sh</string>
Dave Holland
źródło
1
To nie działa Dostaję"/bin/sh: ~/bin/attach-devroot.sh: No such file or directory"
matpie
Działa to tylko wtedy, gdy EnableGlobbingflaga jest ustawiona na true. Zobacz stronę manuala launchd.plist .
sakra
2
EnableGlobbingnie jest już obsługiwany
Liviu