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

Unable to start Java applications on xfce4 desktop? - Screw you lightdm

我曾经使用 Debian 的替代系统来设置 'global env' 就像 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,但这似乎没有在 startup/login 获得 sourced

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

提前致谢!

更新: 使用 ./something.sh 在 bash 终端中启动脚本工作正常。右键单击并执行或 'Open with bash'(XFCE4 上下文菜单)什么都不做。

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

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

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

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

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

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

那么你的脚本就是:

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

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

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

在使用 LightDM 的 XFCE4 中向您的 PATH 变量添加额外的文件夹将无法按预期工作! Shell 使用这些附加命令并从图形环境启动的脚本将失败,因为找不到命令。在启动这些脚本之一时记录 PATH 变量表明 PATH 变量被非常默认的变量覆盖。为什么?因为 LightDM 硬编码 PATH 变量并为图形环境覆盖它。去你的!看here!

来源:https://ljwo.wordpress.com/2014/02/02/global-path-in-debian-wheezy-xfce/

禁用它或使用另一个 DM。