双击Unix可执行文件不同于在终端上运行它



我正在尝试创建包含jdk、jar和shell脚本的.app包,基本上我正在尝试在.app中运行jar。

我在.app中的内容如下(应用程序与unix可执行文件同名(:

.
├── MacOS
│   └── AppName
├── app
│   └── myapp.jar
└── jdk

AppName,如果我们给它.sh扩展名并查看它,它看起来像这个

#!/bin/zsh
../jdk/bin/java -jar ../app/myapp.jar

如果我用./AppName从终端运行这个文件可执行文件,它可以毫无问题地工作。但如果我只是双击它,它不工作说no such file or directory: ../jdk/bin/java

我认为它应该使用双击才能使用.app,因为其他.app都是这样工作的。

../jdk/bin/java这样的相对路径名是相对于当前工作目录的,而不是相对于脚本的位置。

当您的工作目录不是MacOS,而是父目录,并且您以MacOS/AppName启动应用程序时,您可以在终端中重现问题。

一个可能的解决方案可能是

#!/bin/zsh
SCRIPTDIR=$(dirname $0)
"$SCRIPTDIR"/../jdk/bin/java -jar "$SCRIPTDIR"/../app/myapp.jar

最新更新