我的Bash脚本出现问题

时间:2010-09-09 08:51:00

标签: bash executable-jar

他全部, 我的bash脚本有问题。 那是我的代码:

#!/bin/bash
java -jar my_app.jar
echo "The present working directory is `pwd`"

如果我通过./script_name执行它,它可以工作,但如果我双击它不起作用,我收到此错误:
“无法访问jarfile my_app.jar”。
然后pwd输出不同!!!

我的操作系统是MacOSX,但我需要创建一个在Linux中运行的bash脚本。

4 个答案:

答案 0 :(得分:1)

我相信solution建议的Shawn J. GoffGordon Davisson评论的{{3}}可以通过采用现代bash命令替换语法来改进。我假设脚本和jar在同一个文件夹中:

#!/bin/bash
java -jar "$(cd "$(dirname "$0")"; pwd)/my_app.jar"
echo The present working directory is $(cd "$(dirname "$0")"; pwd)

答案 1 :(得分:0)

如果使用图形工具执行脚本,则当前工作目录是任意的。当前工作目录在图形应用程序中不是一个有用的概念,它们通常不使用或更改它。这意味着您必须在调用java程序时包含完整路径,或者更改为脚本所在的目录。不幸的是,there is no good solution for the latter

答案 2 :(得分:0)

变量$ 0应该包含脚本的路径。您可以使用dirname获取脚本所在的目录。

java -jar `dirname $0`/my_app.jar

答案 3 :(得分:0)

好的,所以你必须解决2个问题:

  1. 假设您的脚本和jar总是安装在同一目录中,问题1是识别该目录。这是here的讨论。一旦知道了脚本的目录,就可以引用相对于该目录的jar文件。

  2. 系统安装的java可执行文件的路径。最终只使用裸java是简单和传统的,并且依赖于正确配置的PATH。如果这不适合您,只需包含最常见路径的有序列表,并查看它们是否可以使用if [ -e /usr/bin/java ]执行,例如,运行您的代码找到的第一个路径。