我正在尝试在 bash 脚本中运行几个不同的进程。我正在使用 Mac。基本上,我正在运行一个名为 OpenFOAM 的 CFD 软件,该软件在 docker 容器中运行,需要在我开始运行模拟之前启动它。我正在 https://openfoam.org/download/7-macos/ 遵照他们的指示。我安装了 X11。
到目前为止,我的脚本一直工作到容器启动的部分,但它没有在容器内执行命令“simpleFoam”inside,它运行模拟。基本上,它启动容器并停止。
OpenFoam 容器启动后如何运行命令?到目前为止,这是我的代码:
#!/bin/bash
cd ~/openfoam/run/airFoil2D
openfoam7-macos
simpleFoam
它基本上可以工作到 openfoam7-macos
(启动容器),但之后什么都不会执行。
openfoam7-macos
script 似乎在幕后运行 docker
。我如何传递一个命令来执行?
答案 0 :(得分:1)
尝试将脚本复制到私有位置 - 例如,openfoam7-exec
,并将脚本末尾附近的 Docker 命令替换为
docker run -it \
--rm \
-e DISPLAY=$IP:0 \
-u $USER_ID:$GROUP_ID \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $MOUNT_DIR:$HOME_DIR \
$DOCKER_OPTIONS \
$DOCKER_IMAGE "$@"
您还需要将脚本开头附近的 usage
语句中的 case
命令替换为 break
语句,以允许将参数传递给 Docker。 (这可能会破坏脚本的选项解析,因此如果您需要选项工作,这可能需要进一步改进。)
通过此更改,向脚本添加参数应该会导致 Docker 不只是以交互模式启动容器,而是将该参数作为容器中的命令运行,然后在该命令终止时关闭容器。
那么,如果您将 PATH
中修改后的脚本保存为 openfoam7-exec
并使其可执行,那么您的脚本应该希望通过简单的修改即可工作:
#!/bin/bash
openfoam7-exec simpleFoam
(我仍然不相信 cd
是有用的,更不用说是必要的了;显然,如果是,就把它放回去。)