【问题标题】:setenv variable with spaces in launchd.conf?在launchd.conf中有空格的setenv变量?
【发布时间】:2011-01-31 22:26:37
【问题描述】:

我是一名 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 存活。 (没有空格的。)其余的都不在我的环境中。

【问题讨论】:

  • 你知道如何让它工作吗?我有同样的问题。我还注意到 concat Vars 不起作用。我无法指定:setenv MV 1 setenv MV12 $MV/2
  • 不,抱歉。希望有一天,某个善良、消息灵通的人会来,让我们知道解决方案。 ;)
  • 我遇到了完全相同的问题。那些环境变量问题,每次都是不同的问题:S
  • 你试过 Serge 的建议了吗?它对你有用吗?

标签: macos launchd


【解决方案1】:

在 10.13.2 中,这对我有用:

launchctl setenv MY_VARIABLE '我的空格值'

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    setenv MY_VARIABLE My\ value\ with\ spaces

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      $ launchctl setenv MY_VARIABLE My\ value\ with\ spaces
      

      验证:

      $ launchctl getenv MY_VARIABLE
      My value with spaces
      

      【讨论】:

      • launchctl in Terminal 和 launchd.conf 完全不相关。 bash 解析反斜杠,launchd.conf 不解析。
      【解决方案4】:

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

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

      【讨论】:

      • 谢谢一百万!我整天都在寻找解决方案。这是唯一适用于全球的方法。
      • 多个环境变量怎么样?
      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-03
        • 1970-01-01
        • 1970-01-01
        • 2023-01-24
        • 2017-12-15
        • 2012-04-25
        • 1970-01-01
        相关资源
        最近更新 更多