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

时间:2017-03-17 00:18:49

标签: bash shell unix

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

我创建了启动脚本并包含了jar文件名和要执行的路径。 但是Jar文件有版本号,它会为每个新版本更改。 我需要在我的脚本中更新该版本号。我该怎么办? 例如:Jar文件--- sample-1.0.2.jar 在脚本中,我给了PATH_TO_JAR = / opt / sample.jar,但是由于版本号,这个sample.jar没有执行。

我在/ opt / bin文件夹中的启动脚本。在执行我的脚本时,PATH_TO_JAR = / opt / sample-1.0.2.jar必须使用版本进行更新。 如何在脚本中更新jar版本号?

1 个答案:

答案 0 :(得分:1)

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

假设你有两个文件,你不能只按sort按字典顺序排列:

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

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_TO_JAR环境变量

假设的update-path.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

要使用它,. update-path.shsource update-path.sh