Bash脚本无法找到.JAR文件

Bash脚本无法找到.JAR文件,bash,terminal,sh,minecraft,Bash,Terminal,Sh,Minecraft,所以我正在尝试制作一个自动化的bash脚本来帮助构建Minecraft插口服务器的某些版本。为了“构建”服务器,您必须通过在终端中运行以下命令来反编译.jar文件 导出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脚本来帮助构建Minecraft插口服务器的某些版本。为了“构建”服务器,您必须通过在终端中运行以下命令来反编译.jar文件

导出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
我的main目标是通过更改
--rev
标志,删除“java版本”行(如果不使用当前的1.13版本),来手动编辑脚本并指定要下载的版本

理想情况下我希望脚本运行一次,询问我希望使用哪个版本。如果我按enter键,它将省略
--rev
标志和java版本行,并下载当前版本(1.13),如果我指定一个版本(即“1.9”),它将运行
导出java_HOME=“/usr/libexec/java_HOME-v 1.8”
行,并将
--rev
标志添加到执行行的末尾

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


我希望该脚本能够正常工作,因为我会将该脚本转发给其他服务器开发人员,这些开发人员可以在日常开发中使用该脚本,而不必在每次构建服务器时都通过终端运行多个命令。

执行类似操作的最简单方法是使用一个脚本可选参数:

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特性。例如:

  • 您可以使用
    readonly default\u version
    声明默认版本变量常量
  • 你可以更可靠地使用它

    • 执行类似操作的最简单方法是使用一个可选参数:

      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特性。例如:

      • 您可以使用
        readonly default\u version
        声明默认版本变量常量
      • 你可以更可靠地使用它

      这可能不是全部问题,但您肯定需要将定义
      JAVA\u HOME
      的行更改为类似
      export JAVA\u HOME=“$(/usr/libexec/JAVA\u HOME-v1.8)”
      ——按照您的方式,将变量设置为该字符串,而不是将其作为命令运行并将变量设置为命令的输出。这可能不是问题的全部,但您肯定需要将定义
      JAVA_HOME
      的行更改为类似
      export JAVA_HOME=“$(/usr/libexec/JAVA_HOME-v1.8)”
      ——按照您的方式,将变量设置为该字符串,而不是将其作为命令运行并将变量设置为命令的输出。