如何自动回答安装提示(“是”除外)?

时间:2018-08-31 04:05:03

标签: dockerfile apt tex-live

简介

我正在尝试构建一个Docker映像,但是它失败了,因为我尝试使用apt install获取的一个软件包会在安装过程中提示用户。我想回复此提示,但我不知道如何非交互地进行操作。

说明

我正在构建Docker映像,并且Dockerfile包含以下行:

RUN apt install -y texlive-latex-extra

(此软件包中有一些我需要的LaTeX库。)

在安装过程中,此操作将暂停:

Setting up tzdata (2018d-1) ...
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
Configuring tzdata
------------------

Please select the geographic area in which you live. Subsequent configuration
questions will narrow this down by presenting a list of cities, representing
the time zones in which they are located.

  1. Africa        6. Asia            11. System V timezones
  2. America       7. Atlantic Ocean  12. US
  3. Antarctica    8. Europe          13. None of the above
  4. Australia     9. Indian Ocean
  5. Arctic Ocean  10. Pacific Ocean
Geographic area:

这时,它正在等待输入。 (此后还有另一个提示,用于选择时区-我认为这对于LaTeX文件中的\today指令很重要。\\((ツ)_ /¯)

我该如何非交互地回答此问题?

到目前为止我已经尝试过的

我尝试这样做:

apt install -y texlive-latex-extra <(echo 12 && echo 2)

这:

echo 12 && echo 2 | apt install -y texlive-latex-extra

第一个死于此错误:

apt install -y texlive-latex-extra <(echo 12 && echo 9)

第二个似乎没有效果。

作为参考,这是到目前为止的Dockerfile:

FROM ubuntu:latest

RUN apt update && apt upgrade -y && apt install -y curl bzip2 tar make gcc wget gnupg unzip
RUN apt install -y texlive
RUN apt install -y nodejs npm git
RUN npm install -g bower
RUN apt install -y texlive-latex-extra

更新

我发现here接近,建议在apt install上运行DEBIAN_FRONTEND=noninteractive。这充分解决了我的问题。 :)但是,我仍然想知道如何响应提示,因为那里提供的解决方案仅提供了如何抑制提示。

1 个答案:

答案 0 :(得分:3)

如果要编写终端交互的脚本,可以在Linux上使用expect(这可能并不容易;您需要预测交互)。

请记住,terminal emulators是复杂且不可思议的事情(因为terminals之类的VT100很复杂)。参见termios(3)pty(7)并阅读The Tty demystified