我曾经使用 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 上下文菜单)不执行任何操作。
最佳答案
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/