11

我是一个 Linux 用户,最近刚买了一个 mac。我正在尝试设置我的 IDE,并发现 Mac 不使用 .bashrc / .bash_profile / 等作为 GUI 应用程序。因此,如果您有一个需要环境变量的 GUI 应用程序,您显然应该在 /etc/launchd.conf 中执行它

问题是,这个文件使用 csh 风格的 setenv 语法(“setenv key value”而不是“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/检查
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 存活。(没有空格的。)其余的都不在我的环境中。

4

5 回答 5

8

尝试改用 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>

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

于 2012-07-13T22:29:15.827 回答
3

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

setenv MY_VARIABLE My\ value\ with\ spaces

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

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

launchctl setenv MY_VARIABLE My\ value\ with\ spaces
正如 patrikha 建议的那样。

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

于 2013-09-30T07:44:00.060 回答
2

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

$ launchctl setenv MY_VARIABLE My\ value\ with\ spaces

验证:

$ launchctl getenv MY_VARIABLE
My value with spaces
于 2012-12-30T20:38:39.163 回答
2

它不像在 c-shell 中那样工作,因为 /etc/launchd.conf 只不过是一系列用于 launchctl 的特殊命令。有关 /etc/launchd.conf 中的工作原理的参考,请参见 launchctl 手册页

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

于 2010-08-31T22:07:20.693 回答
1

在 10.13.2 中,这对我有用:

launchctl setenv MY_VARIABLE '我的空格值'

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

执行 shell 脚本“launchctl setenv MY_VARIABLE '我的空格值'”

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

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

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

于 2018-01-19T05:18:56.777 回答