#!/bin/bash # 检查到未定义的变量则停止执行并报错 set -u # 检查参数数量 if [ "$#" -ne 2 ]; then echo "Error: Incorrect number of arguments" echo "Usage: $0 CONTAINER_NAME DOWNLOAD_FILE_PATH" exit 1 fi CONTAINER_NAME=$1 DOWNLOAD_FILE_PATH=$2 UPDATE_DATA_PATH="/home/cicv/work/pji_desktop/map_update/data" CONTAINER_WORKSPACE="/home/cartographer_detailed_comments_ws-master" # 敏感目录列表 SENSITIVE_DIRS=( "/" "/bin" "/boot" "/dev" "/etc" "/home" "/lib" "/lib64" "/opt" "/proc" "/root" "/sbin" "/sys" "/tmp" "/usr" "/var" "/home/cicv" ) # 判断某目录是否为敏感目录 is_sensitive_directory() { local dir="$1" for sensitive_dir in "${SENSITIVE_DIRS[@]}"; do if [[ "$dir" == "$sensitive_dir" ]]; then return 0 # 敏感目录 fi done return 1 # 非敏感目录 } # 清除历史文件 # 检查要删除的目录是否为空 if [[ -z "$UPDATE_DATA_PATH" ]]; then echo "Error: Variable UPDATE_DATA_PATH is not set or empty" exit 1 fi # 检查要删除的目录是否为敏感目录 if is_sensitive_directory "$UPDATE_DATA_PATH"; then echo "Error: '$UPDATE_DATA_PATH' is a sensitive directory and can not be deleted!" exit 1 fi # 删除对应目录 sudo rm -rf "$UPDATE_DATA_PATH" # 解压地图更新对应的压缩包 unzip "$DOWNLOAD_FILE_PATH" -d "$UPDATE_DATA_PATH" # 检查容器启动状态 if [ "$(docker inspect -f '{{.State.Running}}' $CONTAINER_NAME)" = "true" ]; then echo "Container $CONTAINER_NAME is already running." else echo "Starting container $CONTAINER_NAME..." docker start "$CONTAINER_NAME" fi command="source $CONTAINER_WORKSPACE/devel_isolated/setup.sh && $CONTAINER_WORKSPACE/build_map.sh $CONTAINER_WORKSPACE/config.json" # 容器内执行地图更新脚本 docker exec "$CONTAINER_NAME" /bin/bash -c "$command"