Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I'm curious if it's possible to specify an envrionment variable in the ProgramArguments portion of a luanchd script on 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>
share|improve this question
add comment

3 Answers

Not in the ProgramArguments key. You need to add an EnvironmentVariables key into your plist's dict like so:

<?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>
share|improve this answer
    
Sure, you can hard code your env. vars in the plist, but you can't use existing vars like $HOME. Unless it's just an argument to a shell script, in which case the shell (not launchd), will expand it. But in this example, it might actually work if you add the -c option to /bin/sh ? –  mivk Jul 12 '12 at 20:04
add comment

I don't think launchd knows about the environment natively, at least not as ${VARIABLE} substitutions.

There's nothing stopping you from launching a shell script (or a shell with -c) as your launchd action though, and that would have an environment and respect ${VARIABLES} -- Be aware of the difference between System and User daemons/agents in that case though...

share|improve this answer
add comment

I'm not sure - I haven't tried it before... but I can tell you that if the only variable you care about is home - you can use ~.

So: <string>~/bin/attach-devroot.sh</string>
share|improve this answer
1  
This doesn't work. I get "/bin/sh: ~/bin/attach-devroot.sh: No such file or directory" –  sirlancelot Feb 17 '10 at 0:56
    
This only works if the EnableGlobbing flag is set to true. See the launchd.plist man page. –  sakra Jun 2 '12 at 18:45
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.