首页 > 解决方案 > Bash 脚本无法找到 .JAR 文件

问题描述

所以我正在尝试制作一个自动化的 bash 脚本来帮助构建某些版本的 Minecraft Spigot 服务器。为了“构建”服务器,您必须通过在终端中运行以下命令来反编译 .jar 文件。

export MAVEN_OPTS="-Xmx2G"

export JAVA_HOME="/usr/libexec/java_home -v 1.8"(省略此行,除非您正在构建以前的版本,然后是当前的 1.13 构建,它使用 Java 11 而不是 Java 8)

java -jar BuildTools.jar(可选:--rev标志可用于指示您要下载的服务器版本)

现在,这就是我迄今为止想出的制作一个简单的“双击并完成”bash 脚本的方法。我对运行、编译、编写 bash 脚本等非常陌生。我得到的错误类似于“找不到 BuildTools.jar”,但是这被我的终端弹出窗口阻止了,我无法摆脱并且仍然看到该消息。单击确定后,它只会关闭窗口。

#!/bin/sh
cd "$( dirname "$0" )"

export MAVEN_OPTS="-Xmx2G"

export JAVA_HOME="/usr/libexec/java_home -v 1.8"

exec java -jar BuildTools.jar --rev 1.8.8

我的主要目标是能够手动编辑脚本并通过更改--rev标志来指定我想下载的版本,如果不使用当前的 1.13 版本,则删除“java 版本”行。

理想情况下 ,我希望脚本一旦运行,就问我想使用哪个版本。如果我按回车键,它会省略--rev标志和 java 版本行,并下载当前版本(1.13),如果我指定一个版本(即“1.9”),它会运行该export JAVA_HOME="/usr/libexec/java_home -v 1.8"行并将--rev标志添加到 exec 行的末尾。

如果这没有任何意义,这里的文章解释了如何在没有“自动脚本”的情况下通过终端做我正在做的事情。

https://www.spigotmc.org/wiki/buildtools/

我想让这个脚本工作,因为我会将这个脚本转发给其他服务器开发人员,他们将能够在他们的日常开发中使用该脚本,并且每次他们想要构建一个时都不必通过终端运行多个命令服务器。

标签: bashterminalshminecraft

解决方案


执行此类操作的最简单方法是采用单个可选参数:

java -jar BuildTools.jar --rev "${1-1.8.8}"

这可能看起来有点笨拙,但这意味着可以像my_script.sh使用默认版本或my_script.sh 2.0使用 2.0 版本一样调用脚本。

另一个简单的改进是为默认版本提取一个变量:

default_version='1.8.8'
java -jar BuildTools.jar --rev "${1-$default_version}"

您的 shebang 行使用/bin/sh,这与 Bash 不同。这可能使您的脚本比使用 Bash 更便于移植,但是 Bash 现在非常普遍,您可以在脚本中利用 Bash 功能。例如:

  • 您可以使用 声明默认版本变量常量readonly default_version
  • 您可以更可靠地获取脚本路径。

推荐阅读