他全部, 我的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脚本。
答案 0 :(得分:1)
我相信solution建议的Shawn J. Goff和Gordon 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个问题:
假设您的脚本和jar总是安装在同一目录中,问题1是识别该目录。这是here的讨论。一旦知道了脚本的目录,就可以引用相对于该目录的jar文件。
系统安装的java
可执行文件的路径。最终只使用裸java
是简单和传统的,并且依赖于正确配置的PATH。如果这不适合您,只需包含最常见路径的有序列表,并查看它们是否可以使用if [ -e /usr/bin/java ]
执行,例如,运行您的代码找到的第一个路径。