run_map_update.sh 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/bin/bash
  2. # 检查到未定义的变量则停止执行并报错
  3. set -u
  4. # 检查参数数量
  5. if [ "$#" -ne 2 ]; then
  6. echo "Error: Incorrect number of arguments"
  7. echo "Usage: $0 CONTAINER_NAME DOWNLOAD_FILE_PATH"
  8. exit 1
  9. fi
  10. CONTAINER_NAME=$1
  11. DOWNLOAD_FILE_PATH=$2
  12. UPDATE_DATA_PATH="/home/cicv/work/pji_desktop/map_update/data"
  13. CONTAINER_WORKSPACE="/home/cartographer_detailed_comments_ws-master"
  14. # 敏感目录列表
  15. SENSITIVE_DIRS=(
  16. "/"
  17. "/bin"
  18. "/boot"
  19. "/dev"
  20. "/etc"
  21. "/home"
  22. "/lib"
  23. "/lib64"
  24. "/opt"
  25. "/proc"
  26. "/root"
  27. "/sbin"
  28. "/sys"
  29. "/tmp"
  30. "/usr"
  31. "/var"
  32. "/home/cicv"
  33. )
  34. # 判断某目录是否为敏感目录
  35. is_sensitive_directory() {
  36. local dir="$1"
  37. for sensitive_dir in "${SENSITIVE_DIRS[@]}"; do
  38. if [[ "$dir" == "$sensitive_dir" ]]; then
  39. return 0 # 敏感目录
  40. fi
  41. done
  42. return 1 # 非敏感目录
  43. }
  44. # 清除历史文件
  45. # 检查要删除的目录是否为空
  46. if [[ -z "$UPDATE_DATA_PATH" ]]; then
  47. echo "Error: Variable UPDATE_DATA_PATH is not set or empty"
  48. exit 1
  49. fi
  50. # 检查要删除的目录是否为敏感目录
  51. if is_sensitive_directory "$UPDATE_DATA_PATH"; then
  52. echo "Error: '$UPDATE_DATA_PATH' is a sensitive directory and can not be deleted!"
  53. exit 1
  54. fi
  55. # 删除对应目录
  56. sudo rm -rf "$UPDATE_DATA_PATH"
  57. # 解压地图更新对应的压缩包
  58. unzip "$DOWNLOAD_FILE_PATH" -d "$UPDATE_DATA_PATH"
  59. # 检查容器启动状态
  60. if [ "$(docker inspect -f '{{.State.Running}}' $CONTAINER_NAME)" = "true" ]; then
  61. echo "Container $CONTAINER_NAME is already running."
  62. else
  63. echo "Starting container $CONTAINER_NAME..."
  64. docker start "$CONTAINER_NAME"
  65. fi
  66. command="source $CONTAINER_WORKSPACE/devel_isolated/setup.sh && $CONTAINER_WORKSPACE/build_map.sh $CONTAINER_WORKSPACE/config.json"
  67. # 容器内执行地图更新脚本
  68. docker exec "$CONTAINER_NAME" /bin/bash -c "$command"