如何在Shell脚本中创建新Shell实例运行两个Docker相关脚本
在独立Shell中运行两个Docker脚本的方案
方案1:拆分脚本为独立文件,用启动脚本统一唤起
把两个逻辑拆成单独的脚本文件,再写个启动脚本让它们分别在新终端窗口运行:
- 编写
start_container.sh(对应你的脚本1):
#!/bin/bash # 启动容器,根据需求选择方式: # 推荐用-d参数让容器后台运行,脚本执行完容器也不会停止 docker run -d --name my_target_container <你的镜像名> <容器内持久化运行的命令> # 如果必须前台运行容器(比如交互式服务),加&放到后台: # docker run --name my_target_container <你的镜像名> <服务命令> &
- 编写
enter_container.sh(对应你的脚本2):
#!/bin/bash # 等待2秒确保容器启动就绪,避免直接exec报错 sleep 2 docker exec -it my_target_container /bin/bash
- 编写启动脚本
launch_both.sh:
#!/bin/bash # 用xterm打开新窗口运行脚本1,后台执行不阻塞 xterm -e sh start_container.sh & # 打开新窗口运行脚本2 xterm -e sh enter_container.sh
如果你用的不是xterm,替换成对应终端命令即可:比如GNOME用
gnome-terminal -- sh start_container.sh &,KDE用konsole -e sh start_container.sh &
给所有脚本添加执行权限:
chmod +x start_container.sh enter_container.sh launch_both.sh
运行./launch_both.sh就能看到两个独立终端窗口分别执行对应脚本。
方案2:直接用后台命令串联
不想拆分多个文件的话,直接用&将脚本1放到后台,再运行脚本2:
命令行直接执行:
sh script1.sh & sh script2.sh
或者写入单个脚本run_both.sh:
#!/bin/bash sh script1.sh & sh script2.sh
注意:这种方式下,脚本1是在当前Shell的后台进程运行,并非新开终端窗口;脚本2在当前Shell前台运行。如果需要完全独立的新终端窗口,方案1更贴合需求。
几个关键细节
- 脚本1中的
docker run:如果使用-d参数,容器会后台运行,脚本执行完毕后容器依然保持运行,无需脚本持续驻留;如果必须前台运行容器,一定要加&让进程后台化,否则会阻塞后续命令执行。 - 脚本2中的
sleep不可省略,容器启动需要短暂时间,直接执行docker exec大概率会因容器未就绪报错。
内容的提问来源于stack exchange,提问作者BashingScripts
相关产品推荐
相关产品推荐

