无法在 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。
我曾经使用 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。