#!/usr/bin/env bash # scripts/shell.sh —— 进入容器开发终端(交互式) # # 使用: # bash scripts/shell.sh (WSL / Git Bash / Linux / macOS) # # 容器长跑命令 = `tail -f /dev/null`,跟 docker-compose 等价。 set -eo pipefail CONTAINER="${CONTAINER:-ros2_dev}" # 容器已跑 → 直接 exec if docker ps --format '{{.Names}}' | grep -qx "${CONTAINER}"; then exec docker exec -it "${CONTAINER}" bash -lc \ 'source /opt/ros/humble/setup.bash; source /root/ros2_ws/install/setup.bash; cd /root/ros2_ws; exec bash' fi # 容器没跑 → 尝试 start,不行就 run(用宿主当前目录挂进去) if docker ps -a --format '{{.Names}}' | grep -qx "${CONTAINER}"; then docker start "${CONTAINER}" >/dev/null exec docker exec -it "${CONTAINER}" bash -lc \ 'source /opt/ros/humble/setup.bash; source /root/ros2_ws/install/setup.bash; cd /root/ros2_ws; exec bash' fi echo "[shell.sh] 容器 ${CONTAINER} 不存在,自动用本目录启动..." docker run -d -it \ --name "${CONTAINER}" \ -v "${PWD}:/root/ros2_ws" \ --network ros2_net \ ros2-humble-dev:latest \ bash >/dev/null exec docker exec -it "${CONTAINER}" bash -lc \ 'source /opt/ros/humble/setup.bash; source /root/ros2_ws/install/setup.bash; cd /root/ros2_ws; exec bash'