1. 问题来源
- ros需要启动多个节点,每个节点启动需要进到容器并执行多条命令。需要自动化方法提高效率
2. 解决方法
-
shell脚本启动
【节点1拉起脚本run1.sh】
cd ~/work docker start myContainer1 docker exec -it myContainer1 /bin/bash cd /path/to/node source devel/setup.bash bash ./start_node.sh
【节点2拉起脚本run2.sh】
cd ~/tools docker start myContainer2 docker exec -it myContainer2 /bin/bash cd /path/to/node source devel/setup.bash bash ./start_node.sh
【统一执行脚本】
gnome-terminal --window -e 'bash -c "source ./run1.sh; sleep 1 ; exec bash"' --tab -e 'bash -c "source ./run2.sh ; sleep 3 ; exec bash"'
-
命令解释
gnome-terminal # 打开一个新终端
--window # 打开一个窗口
-e/-x # -e可以多次执行,放在--window之前,对所有window和tab起作用 # -e后只能由一个参数,有空格时用’命令内容’; # -x只能执行一次,针对所有tab执行
bash -c # -c表示后面参数将会作为字符串读入作为执行的命令 # bash后接执行脚本,如bash run.sh # bash -c后接命令,如bash -c "ls"
source ./run.sh
source ./run.sh或者 . ./run.sh都能生效新的环境变量
如果run.sh中有打开目录的操作,比如cd ~/work,执行后会发现新打开的tab并没有进到~/work目录,因为shell调用子进程执行完cd ~/work操作后又回到./yijianshi.sh所在目录,即生效的还是./yijianshi.sh所在的环境变量。
3. 另一种解决方法
- 使用docker-compose.yml,可能存在同一终端多个节点无法区分的问题
- 下次文章中再写
参考文章:
shell启动多个窗口
执行shell脚本无法切换目录原因
shell启动多个标签页tab
窗口启动脚本命令解释
created by shuaixio, 2022.02.07