【问题标题】:Java System.getEnv()Java System.getEnv()
【发布时间】:2012-08-07 01:40:00
【问题描述】:

在 mac OSX 和 Linux CentOS 中,我使用 .bashrc 和 .bash_profile 插入一个新的系统环境变量(即“MYAPP”)。我什至重新启动了我的笔记本电脑 (mac) 和我的服务器 (linux)。

当我使用命令行“env”时,该环境变量显示为正确的值。但不知何故,每次我尝试在 mac 或 linux 中的 Java 应用程序(桌面应用程序或 Web 应用程序或 EJB 或 servlet 任何其他 Java 应用程序)中获取它时,都不会检索到该环境变量(“MYAPP”)。

我尝试遍历 Java 可以检索的整个环境变量,结果发现它检索了除“MYAPP”之外的所有环境变量。这很奇怪。

有人知道怎么解决吗?

【问题讨论】:

  • 请发布您尝试过的代码 sn-p。
  • 显而易见的答案是,无论您使用什么来启动 Java 应用程序,都没有使用与您将环境变量添加到其 bashrc / bash_profile 的帐户关联的环境设置。也许您将它们添加到错误的帐户?

标签: java variables environment getenv


【解决方案1】:

export MYAPP=...了吗?导出变量使其可用于子进程,例如由您的 shell 运行的 java。

【讨论】:

    【解决方案2】:

    在 Linux 中,如果您只在 bash 会话中设置变量(或导出它),它将可用于一种“子”会话,该会话仅可用于您刚刚执行的命令,而没有其他任何东西。

    您可能可以使用dot operator in bash(也称为“源”命令)。从页面:

    当使用 `source' 运行脚本时,它在现有 shell 中运行,脚本创建或修改的任何变量在脚本完成后仍然可用。

    所以你可以尝试做 . export VARIABLE=value,然后运行你的 java 程序。这类似于在 Windows 终端中设置变量,然后打开一个新终端并期望 env var 存在。不会的。

    这样,你告诉 bash “这个命令应该在这个特定的会话(会话的进程)中可用”。否则你告诉它“为在我运行这个导出命令后将结束的 bash 会话设置这个环境变量”因此,当你运行你的 Java 程序时它不会存在。

    【讨论】:

      【解决方案3】:

      在定义并导出环境变量之后。从同一个终端启动您的 IDE。

      【讨论】:

        【解决方案4】:

        试着写

        "$System.env.STOREPWD"

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-16
          • 1970-01-01
          • 2020-07-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多