bash - 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/
我想让这个脚本工作,因为我会将这个脚本转发给其他服务器开发人员,他们将能够在他们的日常开发中使用该脚本,并且每次他们想要构建一个时都不必通过终端运行多个命令服务器。
解决方案
执行此类操作的最简单方法是采用单个可选参数:
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
。 - 您可以更可靠地获取脚本路径。
推荐阅读
- python-2.7 - tensorflow对象检测API:生成自定义数据集的TF记录
- c# - 如何使用 Jquery Ajax 将参数传递给 mvc ActionResult?
- algorithm - 在遗传算法中挑选育种者
- three.js - 容器中的三个.js raycaster
- angularjs - 未捕获的 ReferenceError:未定义 myFunc
- java - 当有人接听电话时如何检测电话状态
- woocommerce - 如何在产品的 BODY 文本上显示 woocommerce PRICE - 使用 SHORTCODE?
- cupy - Cupy结构数组下标
- python - Pyinstaller subprocess.check_output 错误
- xamarin - 有没有办法可以在 C# 后端的页面中添加资源?