给我一个shell脚本,脚本从ROS的package.xml中读取version的版本,并对最后一位加一,然后重新写入到package.xml中
时间: 2023-02-26 07:55:12 浏览: 62
#!/bin/sh# 获取版本号
version=$(grep -oP '(?<=version=")[^"]*' package.xml)# 将版本号最后一位加一
newVersion=$(echo $version | sed 's/\(.*\)\([0-9]\)\([0-9]\)$/\1\2\3/')# 重新写入
sed -i "s/\(version=\"\)[^\"]*/\1${newVersion}/" package.xml
相关问题
给我一个shell脚本,脚本能读取ROS的package.xml文件中的版本号,并在脚本中对版本最后一位加一,并将结果更新到文件中
#!/bin/bash# 读取ROS package.xml文件中的版本号
version=$(grep -oPm1 "(?<=<version>)[^<]+" package.xml)# 将版本号最后一位加一
last_number=$(echo $version | grep -oP "[0-9]$")
new_number=$((last_number + 1))
new_version="${version%?}$new_number"# 更新版本号
sed -i "s/<version>$version/<version>$new_version/g" package.xml
我想在ROS项目common中添加一个.cmake文件,该cmake文件的主要功能是在编译时自动更新调用该cmake文件模块的版本,版本信息存储在调用该camke模块项目的package.xml中,调用命令git describe --tags获取tag信息,并只读取版本,如果没有tag信息,就不更新版本,该版本信息应该更新在ROS项目的package.xml文件的version节点中,并且不能破坏package.xml文件本身的结构, 给我一个该.cmake的例子。
这是一份示例的cmake代码,它满足您提到的要求:
```
# Load the ROS package XML file
find_package(catkin REQUIRED)
catkin_package(
CATKIN_DEPENDS
)
# Define the update_version function
function(update_version)
# Get the current version from the package.xml file
execute_process(COMMAND catkin_package_xml version
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
OUTPUT_VARIABLE CUR_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
# Get the version from Git
execute_process(COMMAND git describe --tags
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
OUTPUT_VARIABLE GIT_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
# Extract the version from the Git description
string(REGEX MATCH "v[0-9]+\\.[0-9]+\\.[0-9]+" NEW_VERSION ${GIT_VERSION})
# Only update the version if a tag was found
if(NOT "${NEW_VERSION}" STREQUAL "")
# Read the package.xml file
file(STRINGS ${PROJECT_SOURCE_DIR}/package.xml PACKAGE_XML_CONTENT)
# Find the version line
string(REGEX MATCH " <version>.*</version>" VERSION_LINE ${PACKAGE_XML_CONTENT})
# Replace the old version with the new one
string(REGEX REPLACE " <version>.*</version>" " <version>${NEW_VERSION}</version>" PACKAGE_XML_CONTENT "${PACKAGE_XML_CONTENT}")
# Write the updated package.xml file
file(WRITE ${PROJECT_SOURCE_DIR}/package.xml "${PACKAGE_XML_CONTENT}")
endif()
endfunction()
# Call the update_version function
update_version()
```
在这份代码中,我们首先加载了ROS的package.xml文件,然后定义了一个名为update_version的函数,该函数通过执行命令从package.xml文件和Git中读取版本信息,并进行比较。如果从Git获取到了新版本,函数将读取package.xml文件,找到version节点,更新其内容,最后将更新后的package.xml文件写回磁盘。