【问题标题】:Auto answering multiple prompts of a bash command in (Bash/Docker RUN) non interactively以非交互方式自动回答(Bash/Docker RUN)中 bash 命令的多个提示
【发布时间】:2020-11-26 02:37:59
【问题描述】:

有一些方法可以在 bash 命令中自动回答 -y,例如

RUN apt-get install -y nodejs

但我有这个案例我想运行

 dpkg --install someDebianpackage.deb && apt install --assume-yes --fix-broken

它实际上回答了它给出的即时提示,但在后期它要求我用答案 6 配置地理区域

然后我想再次用 20 来回答与时区对应的城市的命令

然后再回答 31,然后是 1,与上面的不同问题相同。

我想知道的是以非交互方式将此命令作为单个命令运行。 (我希望制作一个 docker 文件并将上述命令与其他一些可以与 && 链接的命令放在一个 RUN 命令 例如像

RUN apt-get update && apt-get install sudo && "the above command along with their answers" && "some other command"

我非常感谢您对此提供一些指导

【问题讨论】:

  • 询问您这些答案的具体命令是什么?你真的有可以分享的 Dockerfile 草图吗?
  • 我用我试图运行的内容更新了这个问题。它通过以下方式与@Nick 的答案一起使用 DEBIAN_FRONTEND=noninteractive apt install --assume-yes xfce4 desktop-base

标签: linux bash docker docker-compose dockerfile


【解决方案1】:

从技术上讲,您可以使用 expect 之类的工具自动回答提示。但是,这通常比让程序停止向您提问要困难得多。

我不确定为什么 apt 会询问您的时区,但我怀疑您正在以某种方式拉入 tzdata 包,它想要配置您的时区。为避免这些问题,您应该将前端设置为非交互式:

在没有交互的情况下运行 dpkg(在 Apt 等其他工具之后) 对话,你可以设置一个环境变量为

DEBIAN_FRONTEND=noninteractive

(Source.)

在 Dockerfile 中,您可以像这样设置环境变量:

ENV DEBIAN_FRONTEND=noninteractive

【讨论】:

    猜你喜欢
    • 2021-08-01
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多