Gunakan variabel lingkungan dalam skrip launchd

21

Saya ingin tahu apakah mungkin untuk menentukan variabel lingkungan di ProgramArgumentsbagian skrip luanchd pada 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
sumber

Jawaban:

16

Tidak dalam kunci ProgramArguments. Anda perlu menambahkan EnvironmentVariableskunci ke dalam dict plist Anda seperti:

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

Lihat: Membuat Luncurkan Daemon dan Agen .

Joe Block
sumber
3
Tentu, Anda bisa membuat kode env Anda dengan susah payah. vars di plist, tetapi Anda tidak dapat menggunakan vars yang ada seperti $ HOME. Kecuali itu hanya argumen untuk skrip shell, dalam hal ini shell (bukan launchd), akan memperluasnya. Tetapi dalam contoh ini, ini mungkin benar-benar berfungsi jika Anda menambahkan -copsi ke / bin / sh?
mivk
3

Saya tidak berpikir launchd tahu tentang lingkungan secara native, setidaknya bukan sebagai pengganti $ {VARIABLE}.

Tidak ada yang menghentikan Anda dari meluncurkan skrip shell (atau shell dengan -c) sebagai tindakan launchd Anda, dan itu akan memiliki lingkungan dan menghargai $ {VARIABLES} - Waspadai perbedaan antara daemon / agen System dan Pengguna / agen dalam kasus itu meskipun...

voretaq7
sumber
1

Saya tidak yakin - saya belum pernah mencobanya sebelumnya ... tetapi saya dapat memberitahu Anda bahwa jika satu-satunya variabel yang Anda pedulikan adalah rumah - Anda dapat menggunakan ~.

So: <string>~/bin/attach-devroot.sh</string>
Dave Holland
sumber
1
Ini tidak bekerja Saya mendapatkan"/bin/sh: ~/bin/attach-devroot.sh: No such file or directory"
matpie
Ini hanya berfungsi jika EnableGlobbingflag disetel ke true. Lihat halaman manual launchd.plist .
sakra
2
EnableGlobbingtidak didukung lagi
Liviu