在启动的脚本中使用环境变量


21

我很好奇,是否可以ProgramArguments在Mac OS X Leopard的luanchd脚本的一部分中指定环境变量。

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

Answers:


16

不在ProgramArguments键中。您需要EnvironmentVariables像这样在plist的dict中添加一个密钥:

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

请参阅:创建启动守护程序和代理


3
当然,您可以对环境进行硬编码。plist中的var,但您不能使用$ HOME之类的现有var。除非只是shell脚本的参数,否则shell(未启动)将对其进行扩展。但是在此示例中,如果将-c选项添加到/ bin / sh吗?
mivk 2012年

3

我不认为launchd本身就了解环境,至少不是$ {VARIABLE}替代品。

虽然没有什么可以阻止您在启动操作时启动shell脚本(或带有的shell -c),但这将具有环境并尊重$ {VARIABLES} -在这种情况下,请注意System和User守护程序/代理之间的区别虽然...


1

我不确定-我之前没有尝试过...但是我可以告诉您,如果您关心的唯一变量是home-您可以使用〜。

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

1
这行不通。我得到"/bin/sh: ~/bin/attach-devroot.sh: No such file or directory"
麦蒂

这仅在EnableGlobbing标志设置为true时有效。请参见launchd.plist手册页。
sakra 2012年

2
EnableGlobbing不再受支持
Liviu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.