我创建了包含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版本号?
答案 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.sh
或source update-path.sh