双击 Unix 可执行文件与来自终端的 运行 不同
Double clicking Unix Executable file is different from running it from terminal
我正在尝试创建 .app
包,其中包含 jdk、jar 和 shell 脚本,基本上我正在尝试 运行 jar 在 .app
.
我在 .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
-s 也是这样工作的。
像 ../jdk/bin/java
这样的相对路径名是相对于当前工作目录的,而不是脚本的位置。
当您的工作目录不是 MacOS
而是父目录,并且您以 MacOS/AppName
.
启动应用程序时,您可以在终端中重现该问题
一个可能的解决方案可能是
#!/bin/zsh
SCRIPTDIR=$(dirname [=10=])
"$SCRIPTDIR"/../jdk/bin/java -jar "$SCRIPTDIR"/../app/myapp.jar
我正在尝试创建 .app
包,其中包含 jdk、jar 和 shell 脚本,基本上我正在尝试 运行 jar 在 .app
.
我在 .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
-s 也是这样工作的。
像 ../jdk/bin/java
这样的相对路径名是相对于当前工作目录的,而不是脚本的位置。
当您的工作目录不是 MacOS
而是父目录,并且您以 MacOS/AppName
.
一个可能的解决方案可能是
#!/bin/zsh
SCRIPTDIR=$(dirname [=10=])
"$SCRIPTDIR"/../jdk/bin/java -jar "$SCRIPTDIR"/../app/myapp.jar