在同一个 bash 脚本中启动 OpenFoam 容器后运行命令

时间:2021-06-29 03:39:07

标签: bash macos docker shell openfoam

我正在尝试在 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。我如何传递一个命令来执行?

1 个答案:

答案 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 是有用的,更不用说是必要的了;显然,如果是,就把它放回去。)