3

大家,我的 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

4 回答 4

1

我相信Shawn J. Goff提出并由Gordon Davisson评论的解决方案可以通过采用现代命令替换语法来改进。我假设脚本和 jar 在同一个文件夹中:bash

#!/bin/bash
java -jar "$(cd "$(dirname "$0")"; pwd)/my_app.jar"
echo The present working directory is $(cd "$(dirname "$0")"; pwd)
于 2011-04-13T12:46:33.833 回答
0

好的,所以您必须解决两个问题:

  1. 假设您的脚本和您的 jar 始终安装在同一个目录中,问题 1 是识别该目录。这是在这里讨论的。一旦你知道脚本的目录,你就可以引用你的 jar 文件。

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

于 2010-09-14T06:34:03.683 回答
0

如果使用图形工具执行脚本,当前工作目录是任意的。当前工作目录在图形应用程序中不是一个有用的概念,他们通常不会使用或更改它。这意味着您必须在对java程序的调用中包含完整路径,或者更改到脚本所在的目录。不幸的是,后者没有好的解决方案

于 2010-09-09T09:10:52.637 回答
0

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

java -jar `dirname $0`/my_app.jar
于 2010-09-09T12:27:59.040 回答