java - 无法在 xfce4 桌面上启动 Java 应用程序? - 去你的 lightdm

标签 java linux environment-variables

我曾经使用 Debian 的替代系统来设置“全局环境”,例如 java、javac、javap,但我已经了解了这些缺点。

所以我加了

export JAVA_HOME=/opt/jdk/java
export PATH=$JAVA_HOME/bin:$PATH

到我的 ~/.bashrc,当我打开我的终端时,我可以按预期使用命令,但我的大部分 shell 脚本不再工作。

正如您在下图中看到的,它们会检查 $JAVA_HOME 是否存在并执行以下命令,但该命令什么也不做。当我输入 $JAVA_HOME/bin/java -version 它工作正常。如果我在终端中启动脚本,它也能正常工作。

所以看起来 #!/bin/sh 没有 source .bashrc?将其更改为 #!/bin/bash 并不能解决问题。

我试图将 export 命令添加到 /etc/profile 但这似乎没有在启动/登录时得到 sourced

有人有想法或关键字吗?我认为解决方案非常简单,但目前我被卡住了。

提前致谢!

更新: 使用 ./something.sh 在 bash 终端中启动脚本工作正常。右键单击并执行或“使用 bash 打开”(XFCE4 上下文菜单)不执行任何操作。

enter image description here

最佳答案

Bash 仅在 shell 处于交互式非登录 时才加载 .bashrc。在您的情况下,shell 是非交互式,因此未加载 .bashrc。

.bashrc 包含一个检查,如果 shell 不是交互式的,它会阻止它执行。通常 .bashrc 做的第一件事是:

case $- in 
   *i*) ;;
     *) return;;
esac

这将阻止您从脚本中调用 source .bashrc。 该脚本应该继承自您的父 shell,因此您应该在运行该脚本之前获取所有已导出的变量。

此外,首选的 shebang 是 #!/usr/bin/env bash,它更便携。

所以在你的情况下: 打开一个终端窗口。这将加载 .bashrc,但只是为了确保运行 。 .bashrc 然后 echo $JAVA_HOME 验证变量设置是否正确。

那么您的脚本将只是:

#!/usr/bin/env bash
java -jar <whatever>

如果您有其他一些与脚本相关的变量要设置,您可以通过获取“设置”脚本来实现:

#!/usr/bin/env bash
source ~/settings.sh
echo $SOME_VAR_SET_IN_SETTINGS_SH

关于java - 无法在 xfce4 桌面上启动 Java 应用程序? - 去你的 lightdm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32640406/

相关文章:

Linux - 与进程通信?重新加入行动中的进程?

vue.js - Vue 和 Webpack 中的动态导入路径

java - 有什么方法可以发现正在发送的内容吗?

java - 在 Java Web 应用程序中加载外部库

c++ - 在 Linux 上将文本粘贴到事件窗口

linux - 通过命令行创建具有不同配置文件的 Linux 用户

java - 如何通过系统属性将数组或值列表传递给 Java,以及如何访问它?

asp.net - 我可以使用Environment.GetEnvironmentVariable方法从Azure应用程序设置中读取环境变量吗?

java - Spring beans 的键为 Map<String,Foo>

java - 无法编译JSP类