Получить «устройство ввода не является ошибкой TTY» при запуске команды docker внутри цикла while

У меня ниже скрипт bash. Он запускает команду docker run внутри цикла while, который считывает из текстового файла строку за строкой.

#!/bin/sh -eu

while IFS= read -r url; do
    docker run --rm -it alpine ls
done < repo_list.txt

Я получаю эту ошибку the input device is not a TTY при выполнении вышеуказанного скрипта. Однако он отлично работает, если я удалю while loop следующим образом:

#!/bin/sh -eu
docker run --rm -it alpine ls

Я знаю, что могу это исправить, удалив параметр -it из команды docker. Но я хотел бы знать, почему while loop вызывает эту ошибку. Можно ли как-то это исправить, не меняя команду docker?


person Joey Yi Zhao    schedule 24.03.2020    source источник


Ответы (1)


Во втором примере вы забыли изменить стандартный ввод, как вы это сделали в цикле while:

< repo_list.txt

При вводе в виде файла вы не можете включить интерактивную и tty-поддержку одновременно, потому что файл не является tty-устройством.

person BMitch    schedule 24.03.2020