Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在启动脚本中获取jar的版本号和更新版本号?_Bash_Shell_Unix - Fatal编程技术网

Bash 如何在启动脚本中获取jar的版本号和更新版本号?

Bash 如何在启动脚本中获取jar的版本号和更新版本号?,bash,shell,unix,Bash,Shell,Unix,我已经创建了RPM和RPM包含的Jar文件。我有一个启动脚本,它将执行Jar文件 我已经创建了启动脚本,并包含了要执行的jar文件名和路径。 但Jar文件有版本号,它将在每次新构建时更改该版本号。 我需要在我的脚本中更新该版本号。我怎么做? 示例:Jar文件--sample-1.0.2.Jar 在脚本中,我给了路径_TO_JAR=/opt/sample.JAR,但由于版本号的原因,这个sample.JAR没有执行 我的启动脚本位于/opt/bin文件夹中。在执行脚本时,路径_到_JAR=/opt

我已经创建了RPM和RPM包含的Jar文件。我有一个启动脚本,它将执行Jar文件

我已经创建了启动脚本,并包含了要执行的jar文件名和路径。 但Jar文件有版本号,它将在每次新构建时更改该版本号。 我需要在我的脚本中更新该版本号。我怎么做? 示例:Jar文件--sample-1.0.2.Jar 在脚本中,我给了路径_TO_JAR=/opt/sample.JAR,但由于版本号的原因,这个sample.JAR没有执行

我的启动脚本位于/opt/bin文件夹中。在执行脚本时,路径_到_JAR=/opt/sample-1.0.2.JAR必须用版本更新。
如何更新脚本中的jar版本号?

我认为问题归结为按版本字符串对jar进行排序。下面是一个示例命令行代码段,用于提取具有最新版本号的jar

假设您有两个文件,您不能按字典顺序对它们进行排序:

sample-10.0.2.jar
sample-2.3.4.jar
这里,
ls-1
按照上面给出的顺序将它们放入文件中,因为
10
按字母顺序排在
2
之前

假设文件不包含空格,这里有一种按版本字符串排序的可移植方法

ls -1 | awk -F- '{print $2 " " $0}' | sort -t. -n -k1,3 | awk '{print $2}'
稍微分解一下,这个片段会产生以下结果:

ls -1 | awk -F- '{print $2 " " $0}'
提取
-
之后的所有内容,并将其作为行的第一个“单词”打印

10.0.2.jar sample-10.0.2.jar
2.3.4.jar sample-2.3.4.jar
这是前三个字段中的数字排序

sort -t. -n -k1,3
我们实际上想扭转这种情况,所以最大的版本号在顶部,然后我们想抓住第一项。我们可以通过将
-r
传递到
sort
来反转排序,并使用
awk'NR==1{print$1}'获取第一项的第一个字段

ls -1 | awk -F- '{print $2 " " $0}' | sort -t. -n -r -k1,3 | awk 'NR == 1 {print $2}'
这给了我们

sample-10.0.2.jar
所以,把它们放在一起,这里有一个脚本,可以用来更新
PATH\u to\u JAR
环境变量

假设的
更新路径.sh
脚本

# update path to jar, look at all .jar files in /opt
# find the one with the largest version string (assuming three components)
jar_name=$(ls -1 /opt/*.jar | \
    awk -F- '{print $2 " " $0}' | \
    sort -t. -n -r -k1,3 | \
    awk 'NR == 1 {print $2}')
PATH_TO_JAR=/opt/"$jar_name"
export PATH_TO_JAR

要使用它,
。更新路径.sh
源代码更新路径.sh

您想做什么?是否希望脚本自动选择目录中jar的最新版本?您是否正在寻找一种自动化的方式来更改脚本,作为“部署”新版本jar的一部分?是的!!!我正在寻找脚本或命令来更新路径_到_Jar的Jar版本。然后,jar文件将在我的脚本中使用Java-jar命令执行。Jar文件在/opt目录中,脚本在/opt/bin中。我怎样才能得到Jar的版本?谢谢你提供的详细脚本。在我的目录中,每次我只有一个jar。因此,无需进行分类。我只想在我的脚本中选择jar版本。当我通过作业创建新的RPM时,Jar版本被更新为版本号。若我在我的机器上安装了那个RPM,那个么Jar文件就会被解压缩到目录中。我会根据我的要求修改脚本并使用它。再次感谢!!!