1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #!/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"
|