在launchd.conf中带有空格的setenv变量?

时间:2010-03-25 20:54:56

标签: macos launchd

我是一位刚刚获得mac的Linux用户。我正在尝试设置我的IDE并发现Mac不会将.bashrc / .bash_profile /等用于GUI应用程序。所以,如果你有一个需要环境变量的GUI应用程序,你显然应该在/etc/launchd.conf中这样做

问题是,这个文件使用csh样式的setenv语法(“setenv键值”而不是“export key ='value'”)所以现在我有一个有空格的变量,我不知道该怎么办。什么都行不通。这就是我试图测试的:

setenv MAVEN_OPTS "-Xms512m -Xmx1024m"
setenv MAVEN_OPTS1 '-Xms512m -Xmx1024m'
setenv MAVEN_OPTS2 (-Xms512m -Xmx1024m)
setenv MAVEN_OPTS3=(-Xms512m -Xmx1024m)
setenv MAVEN_OPTS4 -Xms512m -Xmx1024m
setenv MAVEN_OPTS5 -Xms512m
setenv MAVEN_OPTS6 "$MAVEN_OPTS5 -Xmx1024"
setenv MAVEN_OPTS7 $MAVEN_OPTS5 -Xmx1024
setenv MAVEN_OPTS8 /just/checking
setenv MAVEN_OPTS9="-Xms512m -Xmx1024m"
setenv MAVEN_OPTS10='-Xms512m -Xmx1024m'
setenv MAVEN_OPTS11='-Xms512m\ -Xmx1024m'
setenv MAVEN_OPTS12 '-Xms512m\ -Xmx1024m'
setenv MAVEN_OPTS13 "-Xms512m\ -Xmx1024m"
setenv MAVEN_OPTS14 -Xms512m\ -Xmx1024m

重启后只有var#5和#8存活。 (那些没有空格的。)其余的都不在我的环境中。

5 个答案:

答案 0 :(得分:7)

尝试使用launchd(创建plist /Library/LaunchDaemons/java.props.plist):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" 
    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>java.props</string>
    <key>ProgramArguments</key>
    <array>
        <string>launchctl</string>
        <string>setenv</string>
        <string>JAVA_OPTS</string>
        <string>-Djava.io.tmpdir=/tmp -Dfile.encoding=UTF-8</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>LaunchOnlyOnce</key>
    <true/>
</dict>
</plist>

这将运行一次并设置您的环境。希望它会有所帮助。

答案 1 :(得分:2)

它不像在c-shell中那样工作,因为/etc/launchd.conf只是一系列startctl的特殊命令。有关/etc/launchd.conf

中有用的参考,请参见launchctl手册页

可悲的是,这仍然无法帮助您解决这个问题,但我希望它能稍微澄清一下背景。对我来说,这个问题是Apple的launchctl / launchd工具的一个缺点。我自己很难解决这个问题。

答案 2 :(得分:2)

在10.8.2上,以下命令正常工作:

$ launchctl setenv MY_VARIABLE My\ value\ with\ spaces

验证:

$ launchctl getenv MY_VARIABLE
My value with spaces

答案 3 :(得分:2)

将以下行添加到/etc/launchd.conf(如果不存在则创建)

setenv MY_VARIABLE My\ value\ with\ spaces

请注意,这只会在重新启动后产生效果。

要使用新值而不必重新启动,另外在终端中运行命令

launchctl setenv MY_VARIABLE My\ value\ with\ spaces
正如patrikha所说。

请注意,这只会对运行该命令后启动的应用程序产生影响。在重新启动后仍然需要操作/etc/launchd.conf来保持更改。

答案 4 :(得分:1)

在10.13.2中,这对我有用:

launchctl setenv MY_VARIABLE&#39;我的空间价值&#39;

但具体来说,我使用脚本编辑器创建一个包含这样的行的应用程序(〜/ StartupEnvVars.app):

执行shell脚本&#34;启动setenv MY_VARIABLE&#39;我的空间价值&#39;&#34;

然后,在“设置”|“用户”|“登录项”中,我将此应用添加为启动项。

这有点警告:如果我在注销时运行终端和我的R应用程序,并选择在重新登录时重新打开窗口,在我登录后自动加载这些应用程序后,他们看不到环境由StartupEnvVars.app设置的变量。但是,如果我关闭这些应用程序并重新打开它们,那么它们就会看到环境变量。

如果它只是终端,我使用.bash_profile,但我想设置env vars以便在R中使用。我认为自从我开始使用它以来,已经有大约5种方法在OSX中设置全局环境变量。每个主要的新版本都有一种新的方式。烦。