【问题标题】:Running command after launching OpenFoam container in the same bash script在同一个 bash 脚本中启动 OpenFoam 容器后运行命令
【发布时间】:2021-09-11 06:54:25
【问题描述】:

我正在尝试在 bash 脚本中运行几个不同的进程。我正在使用 Mac。基本上,我正在运行一个名为 OpenFOAM 的 CFD 软件,该软件在 docker 容器中运行,在我开始运行模拟之前需要启动它。我在https://openfoam.org/download/7-macos/ 遵循他们的指示。我已经安装了 X11。

到目前为止,我的脚本一直运行到容器启动的部分,但它不执行运行模拟的容器内部的命令“simpleFoam”。基本上,它会启动容器并停止。

如何在 OpenFoam 容器启动后运行命令?到目前为止,这是我的代码:

#!/bin/bash 
cd ~/openfoam/run/airFoil2D
openfoam7-macos 
simpleFoam 

它基本上可以在openfoam7-macos(启动容器)之前工作,但之后什么都不会执行。

openfoam7-macos script 似乎在后台运行docker。我怎样才能传递一个命令来执行呢?

【问题讨论】:

  • 不清楚容器在图片中的位置或xterm 运行的位置。你有运行 X11 的容器吗? simpleFoam 是该容器中的有效安装命令吗?你是说 Docker 容器,还是别的什么?
  • 顺便说一句,cd; cd somewhere 可以简化为cd ~/somewhere
  • 你是对的 - 我意识到我不需要专门使用 xterm,而是任何终端。我在桌面上运行 docker,当我 cd 进入 openfoam/run/airFoil2D 文件夹时,我使用“openfoam7-macos”启动 OpenFOAM docker 映像。在这里更好地解释,在“步骤 6”openfoam.org/download/7-macos
  • 运行 'openfoam7-macos' 提供了一个带有 OpenFOAM 的 bash 终端
  • 在终端中使用&& 运行多个命令将执行一个命令,直到它完成,然后再继续执行下一个命令。在这种情况下,完成意味着一旦您从打开的 bash 终端退出。你需要一种不同的方法。例如,docker exec 可以在运行的容器中执行命令。

标签: bash macos docker shell openfoam


【解决方案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 "$@"

您还需要将脚本开头附近的case 语句中的usage 命令替换为break 语句,以允许将参数传递给Docker。 (这可能会破坏脚本的选项解析,因此如果您需要选项工作,这可能需要进一步完善。)

通过此更改,向脚本添加参数应导致 Docker 不仅以交互模式启动容器,而且将该参数作为容器中的命令运行,然后在该命令终止时关闭容器。

那么,如果您将修改后的脚本保存在 PATH 中为 openfoam7-exec 并使其可执行,那么您的脚本应该只需简单的修改即可工作:

#!/bin/bash
openfoam7-exec simpleFoam

(我仍然不相信cd 有用,更不用说必要了;显然,如果有用,请将其放回去。)

【讨论】:

  • 非常感谢您的回答。就像您预测的那样,我认为在这一行中用大小写替换用法: while [ "$#" -gt 0 ] do case "$1" in -d | -dir) [ "$#" -ge 2 ] || break "'$1' option requires an argument" 导致选项出现问题,因为它给了我这个错误: Invalid option 'simpleFoam' Usage: openfoam7-macos [OPTIONS]
  • 听起来我的指示不够清楚。这是一个需要更改的要点(稍微扩展为仍然拒绝无效的 options 但允许参数):gist.github.com/tripleee/9200f7274905f63b6748c0d7dbcf7daa
猜你喜欢
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 2016-03-01
  • 2015-07-26
  • 1970-01-01
  • 2019-03-11
相关资源
最近更新 更多